API Window
Gambaran Umum
Section titled “Gambaran Umum”API Window menyediakan metode untuk mengontrol tampilan, perilaku, dan lifecycle window. Akses melalui instance window atau manajer app.Window.
Window adalah antarmuka yang dipenuhi oleh *application.WebviewWindow; signature metode di bawah ini ada di *WebviewWindow. Banyak mutator mengembalikan Window untuk memungkinkan chaining — nilai kembalian didokumentasikan per metode.
Operasi umum:
- Membuat dan menampilkan window
- Mengontrol ukuran, posisi, dan status
- Menangani event window
- Mengelola konten window
- Mengonfigurasi tampilan dan perilaku
Visibilitas
Section titled “Visibilitas”Show()
Section titled “Show()”Menampilkan window. Jika window disembunyikan, window menjadi terlihat. Mengembalikan receiver untuk chaining.
func (w *WebviewWindow) Show() WindowContoh:
window := app.Window.New()window.Show()Hide()
Section titled “Hide()”Menyembunyikan window tanpa menutupnya. Window tetap di memori dan dapat ditampilkan lagi. Mengembalikan receiver untuk chaining.
func (w *WebviewWindow) Hide() WindowContoh:
// Sembunyikan window sementarawindow.Hide()
// Tampilkan lagi nantiwindow.Show()Kasus penggunaan:
- Aplikasi system tray yang disembunyikan ke tray
- Alur wizard di mana window digunakan kembali
- Penyembunyian sementara selama operasi
Close()
Section titled “Close()”Menutup window. Ini memicu event WindowClosing.
func (w *WebviewWindow) Close()Contoh:
window.Close()Catatan: Jika hook terdaftar memanggil event.Cancel(), penutupan akan dicegah.
Properti Window
Section titled “Properti Window”SetTitle()
Section titled “SetTitle()”Mengatur teks title bar window. Mengembalikan receiver untuk chaining.
func (w *WebviewWindow) SetTitle(title string) WindowParameter:
title- Judul window baru
Contoh:
window.SetTitle("My Application - Document.txt")Name()
Section titled “Name()”Mengembalikan pengenal nama unik window.
func (w *WebviewWindow) Name() stringContoh:
name := window.Name()fmt.Println("Window name:", name)
// Ambil window berdasarkan nama nantiif w, ok := app.Window.GetByName(name); ok { w.Focus()}Ukuran dan Posisi
Section titled “Ukuran dan Posisi”SetSize()
Section titled “SetSize()”Mengatur dimensi window dalam piksel. Mengembalikan receiver untuk chaining.
func (w *WebviewWindow) SetSize(width, height int) WindowParameter:
width- Lebar window dalam pikselheight- Tinggi window dalam piksel
Contoh:
window.SetSize(1024, 768)Size()
Section titled “Size()”Mengembalikan dimensi window saat ini.
func (w *WebviewWindow) Size() (width, height int)Contoh:
width, height := window.Size()fmt.Printf("Window is %dx%d\n", width, height)SetMinSize() / SetMaxSize()
Section titled “SetMinSize() / SetMaxSize()”Mengatur dimensi minimum dan maksimum window. Keduanya mengembalikan receiver untuk chaining.
func (w *WebviewWindow) SetMinSize(width, height int) Windowfunc (w *WebviewWindow) SetMaxSize(width, height int) WindowContoh:
// Cegah window terlalu kecilwindow.SetMinSize(800, 600)
// Cegah window terlalu besarwindow.SetMaxSize(1920, 1080)SetPosition()
Section titled “SetPosition()”Mengatur posisi window relatif terhadap sudut kiri atas layar.
func (w *WebviewWindow) SetPosition(x, y int)Parameter:
x- Posisi horizontal dalam piksely- Posisi vertikal dalam piksel
Contoh:
// Posisikan window di kiri ataswindow.SetPosition(0, 0)
// Posisikan window 100px dari kiri ataswindow.SetPosition(100, 100)Position()
Section titled “Position()”Mengembalikan posisi window saat ini.
func (w *WebviewWindow) Position() (x, y int)Contoh:
x, y := window.Position()fmt.Printf("Window is at (%d, %d)\n", x, y)Center()
Section titled “Center()”Memusatkan window di layar.
func (w *WebviewWindow) Center()Contoh:
window := app.Window.New()window.Center()window.Show()Catatan: Memusatkan di monitor utama. Untuk setup multi-monitor, lihat API screen.
Focus()
Section titled “Focus()”Membawa window ke depan dan memberikan fokus keyboard.
func (w *WebviewWindow) Focus()Contoh:
// Bawa window ke depanwindow.Focus()Status Window
Section titled “Status Window”Minimise() / UnMinimise()
Section titled “Minimise() / UnMinimise()”Meminimalkan window ke taskbar/dock atau memulihkannya. Minimise() mengembalikan receiver untuk chaining; UnMinimise() tidak mengembalikan nilai.
func (w *WebviewWindow) Minimise() Windowfunc (w *WebviewWindow) UnMinimise()Contoh:
// Minimalkan windowwindow.Minimise()
// Pulihkan dari status diminimalkanwindow.UnMinimise()Maximise() / UnMaximise()
Section titled “Maximise() / UnMaximise()”Memaksimalkan window untuk mengisi layar atau memulihkan ke ukuran sebelumnya. Maximise() mengembalikan receiver untuk chaining; UnMaximise() tidak mengembalikan nilai.
func (w *WebviewWindow) Maximise() Windowfunc (w *WebviewWindow) UnMaximise()Contoh:
// Maksimalkan windowwindow.Maximise()
// Pulihkan ke ukuran sebelumnyawindow.UnMaximise()Fullscreen() / UnFullscreen() / ToggleFullscreen()
Section titled “Fullscreen() / UnFullscreen() / ToggleFullscreen()”Memasuki atau keluar dari mode fullscreen. Fullscreen() mengembalikan receiver untuk chaining.
func (w *WebviewWindow) Fullscreen() Windowfunc (w *WebviewWindow) UnFullscreen()func (w *WebviewWindow) ToggleFullscreen()Contoh:
// Masuk fullscreenwindow.Fullscreen()
// Keluar fullscreenwindow.UnFullscreen()
// Atau togglewindow.ToggleFullscreen()Tidak ada metode SetFullscreen(bool).
IsMinimised() / IsMaximised() / IsFullscreen()
Section titled “IsMinimised() / IsMaximised() / IsFullscreen()”Memeriksa status window saat ini.
func (w *WebviewWindow) IsMinimised() boolfunc (w *WebviewWindow) IsMaximised() boolfunc (w *WebviewWindow) IsFullscreen() boolContoh:
if window.IsMinimised() { window.UnMinimise()}
if window.IsMaximised() { fmt.Println("Window is maximised")}
if window.IsFullscreen() { window.UnFullscreen()}Konten Window
Section titled “Konten Window”SetURL()
Section titled “SetURL()”Menavigasi ke URL tertentu dalam window. Mengembalikan receiver untuk chaining.
func (w *WebviewWindow) SetURL(url string) WindowParameter:
url- URL untuk dinavigasi (dapat berupahttp://wails.localhost/untuk aset tertanam)
Contoh:
// Navigasi ke halaman tertanamwindow.SetURL("http://wails.localhost/settings.html")
// Navigasi ke URL eksternal (jika diizinkan)window.SetURL("https://wails.io")SetHTML()
Section titled “SetHTML()”Mengatur konten window langsung dari string HTML. Mengembalikan receiver untuk chaining.
func (w *WebviewWindow) SetHTML(html string) WindowParameter:
html- Konten HTML untuk ditampilkan
Contoh:
html := `<!DOCTYPE html><html><head><title>Dynamic Content</title></head><body> <h1>Hello from Go!</h1> <p>This content was generated dynamically.</p></body></html>`window.SetHTML(html)Kasus penggunaan:
- Generasi konten dinamis
- Window sederhana tanpa proses build frontend
- Halaman error atau splash screen
Reload()
Section titled “Reload()”Memuat ulang konten window saat ini.
func (w *WebviewWindow) Reload()Contoh:
// Muat ulang halaman saat iniwindow.Reload()Catatan: Berguna selama pengembangan atau saat konten perlu diperbarui.
Event Window
Section titled “Event Window”Wails menyediakan dua metode untuk menangani event window:
- OnWindowEvent() - Mendengarkan event window (tidak dapat mencegahnya).
- RegisterHook() - Hook ke event window (dapat mencegahnya dengan memanggil
event.Cancel()).
OnWindowEvent()
Section titled “OnWindowEvent()”Mendaftarkan callback untuk event window. Mengembalikan fungsi unsubscribe.
func (w *WebviewWindow) OnWindowEvent( eventType events.WindowEventType, callback func(event *WindowEvent),) func()Contoh:
import "github.com/wailsapp/wails/v3/pkg/events"
// Dengarkan fokus windowwindow.OnWindowEvent(events.Common.WindowFocus, func(e *application.WindowEvent) { app.Logger.Info("Window gained focus")})
// Dengarkan kehilangan fokus windowwindow.OnWindowEvent(events.Common.WindowLostFocus, func(e *application.WindowEvent) { app.Logger.Info("Window lost focus")})
// Dengarkan resize windowwindow.OnWindowEvent(events.Common.WindowDidResize, func(e *application.WindowEvent) { app.Logger.Info("Window resized")})Event Window Umum:
events.Common.WindowClosing- Window akan ditutupevents.Common.WindowFocus- Window mendapat fokusevents.Common.WindowLostFocus- Window kehilangan fokusevents.Common.WindowDidMove- Window dipindahkanevents.Common.WindowDidResize- Window diubah ukurannyaevents.Common.WindowMinimise- Window diminimalkanevents.Common.WindowMaximise- Window dimaksimalkanevents.Common.WindowFullscreen- Window masuk fullscreenevents.Common.WindowRuntimeReady- Runtime dalam window diinisialisasi
RegisterHook()
Section titled “RegisterHook()”Mendaftarkan hook untuk event window. Hook berjalan sebelum listener dan dapat mencegah event dengan memanggil event.Cancel(). Mengembalikan fungsi unsubscribe.
func (w *WebviewWindow) RegisterHook( eventType events.WindowEventType, callback func(event *WindowEvent),) func()Contoh - Cegah penutupan window:
import "github.com/wailsapp/wails/v3/pkg/events"
window.RegisterHook(events.Common.WindowClosing, func(e *application.WindowEvent) { confirm := app.Dialog.Question(). SetTitle("Confirm Close"). SetMessage("Are you sure you want to close this window?")
yes := confirm.AddButton("Yes") no := confirm.AddButton("No") confirm.SetDefaultButton(yes) confirm.SetCancelButton(no)
no.OnClick(func() { e.Cancel() // Cegah window ditutup })
confirm.Show()})Contoh - Simpan sebelum menutup:
window.RegisterHook(events.Common.WindowClosing, func(e *application.WindowEvent) { if !hasUnsavedChanges { return }
dlg := app.Dialog.Question(). SetTitle("Unsaved Changes"). SetMessage("Save changes before closing?")
save := dlg.AddButton("Save") discard := dlg.AddButton("Don't Save") cancel := dlg.AddButton("Cancel") dlg.SetDefaultButton(save) dlg.SetCancelButton(cancel)
save.OnClick(func() { saveData() }) cancel.OnClick(func() { e.Cancel() }) _ = discard // izinkan penutupan
dlg.Show()})EmitEvent()
Section titled “EmitEvent()”Mengirim event kustom ke frontend window. Mengembalikan true jika emit dibatalkan oleh hook.
func (w *WebviewWindow) EmitEvent(name string, data ...any) boolParameter:
name- Nama eventdata- Data opsional untuk dikirim dengan event
Contoh:
// Kirim data ke window tertentuwindow.EmitEvent("data-updated", map[string]any{ "count": 42, "status": "success",})Frontend (JavaScript):
import { Events } from '@wailsio/runtime'
Events.On('data-updated', (data) => { console.log('Count:', data.count) console.log('Status:', data.status)})Metode Lainnya
Section titled “Metode Lainnya”SetEnabled()
Section titled “SetEnabled()”Mengaktifkan atau menonaktifkan interaksi pengguna dengan window.
func (w *WebviewWindow) SetEnabled(enabled bool)Contoh:
// Nonaktifkan window selama operasi panjangwindow.SetEnabled(false)
// Lakukan operasiperformLongOperation()
// Aktifkan kembali windowwindow.SetEnabled(true)SetBackgroundColour()
Section titled “SetBackgroundColour()”Mengatur warna latar belakang window (ditampilkan sebelum konten dimuat). Mengembalikan receiver untuk chaining.
func (w *WebviewWindow) SetBackgroundColour(colour RGBA) WindowRGBA adalah application.RGBA{Red, Green, Blue, Alpha uint8}. Gunakan helper application.NewRGB(r, g, b) (alpha 255) atau application.NewRGBA(r, g, b, a).
Contoh:
// Latar belakang putihwindow.SetBackgroundColour(application.NewRGB(255, 255, 255))
// Latar belakang gelap dengan alpha penuhwindow.SetBackgroundColour(application.NewRGBA(30, 30, 30, 255))SetResizable()
Section titled “SetResizable()”Mengontrol apakah window dapat diubah ukurannya oleh pengguna. Mengembalikan receiver untuk chaining.
func (w *WebviewWindow) SetResizable(resizable bool) WindowContoh:
// Buat window ukuran tetapwindow.SetResizable(false)SetAlwaysOnTop()
Section titled “SetAlwaysOnTop()”Mengatur apakah window tetap di atas window lain. Mengembalikan receiver untuk chaining.
func (w *WebviewWindow) SetAlwaysOnTop(alwaysOnTop bool) WindowContoh:
// Jaga window tetap di ataswindow.SetAlwaysOnTop(true)Print()
Section titled “Print()”Membuka dialog cetak native untuk konten window.
func (w *WebviewWindow) Print() errorMengembalikan: Error jika pencetakan gagal.
Contoh:
if err := window.Print(); err != nil { log.Println("Print failed:", err)}AttachModal()
Section titled “AttachModal()”Melampirkan window kedua sebagai sheet modal.
func (w *WebviewWindow) AttachModal(modalWindow Window)Parameter:
modalWindow- Window yang dilampirkan sebagai modal
Dukungan platform:
- macOS: Dukungan penuh (ditampilkan sebagai sheet)
- Windows: Tidak didukung
- Linux: Tidak didukung
Contoh:
modalWindow := app.Window.New()window.AttachModal(modalWindow)Opsi Khusus Platform
Section titled “Opsi Khusus Platform”Window Linux mendukung opsi khusus platform berikut melalui LinuxWindow:
MenuStyle
Section titled “MenuStyle”Mengontrol bagaimana menu aplikasi ditampilkan. Opsi ini tersedia pada build GTK4 default dan diabaikan pada build legacy -tags gtk3.
| Nilai | Deskripsi |
|---|---|
LinuxMenuStyleMenuBar | Menu bar tradisional di bawah title bar (default) |
LinuxMenuStylePrimaryMenu | Tombol menu utama di header bar (gaya GNOME) |
Contoh:
window := app.Window.NewWithOptions(application.WebviewWindowOptions{ Title: "My Application", Linux: application.LinuxWindow{ MenuStyle: application.LinuxMenuStylePrimaryMenu, },})window.SetMenu(menu)Catatan: Gaya menu utama menampilkan tombol hamburger (☰) di header bar, mengikuti GNOME Human Interface Guidelines. Ini adalah gaya yang direkomendasikan untuk aplikasi GNOME modern.
Contoh Lengkap
Section titled “Contoh Lengkap”package main
import ( "github.com/wailsapp/wails/v3/pkg/application" "github.com/wailsapp/wails/v3/pkg/events")
func main() { app := application.New(application.Options{ Name: "Window API Demo", })
// Buat window dengan opsi window := app.Window.NewWithOptions(application.WebviewWindowOptions{ Title: "My Application", Width: 1024, Height: 768, MinWidth: 800, MinHeight: 600, BackgroundColour: application.NewRGB(255, 255, 255), URL: "http://wails.localhost/", })
// Konfigurasi perilaku window window.SetResizable(true) window.SetMinSize(800, 600) window.SetMaxSize(1920, 1080)
// Hook konfirmasi sebelum menutup window.RegisterHook(events.Common.WindowClosing, func(e *application.WindowEvent) { dlg := app.Dialog.Question(). SetTitle("Confirm Close"). SetMessage("Are you sure you want to close this window?")
yes := dlg.AddButton("Yes") no := dlg.AddButton("No") dlg.SetDefaultButton(yes) dlg.SetCancelButton(no) no.OnClick(func() { e.Cancel() })
dlg.Show() })
// Dengarkan event window window.OnWindowEvent(events.Common.WindowFocus, func(e *application.WindowEvent) { window.SetTitle("My Application (Active)") app.Logger.Info("Window gained focus") })
window.OnWindowEvent(events.Common.WindowLostFocus, func(e *application.WindowEvent) { window.SetTitle("My Application") app.Logger.Info("Window lost focus") })
// Posisikan dan tampilkan window window.Center() window.Show()
app.Run()}