API Window
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
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()
Menyembunyikan window tanpa menutupnya. Window tetap di memori dan dapat ditampilkan lagi. Mengembalikan receiver untuk chaining.
func (w *WebviewWindow) Hide() WindowContoh:
// Sembunyikan window sementara
window.Hide()
// Tampilkan lagi nanti
window.Show()Kasus penggunaan:
- Aplikasi system tray yang disembunyikan ke tray
- Alur wizard di mana window digunakan kembali
- Penyembunyian sementara selama operasi
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
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()
Mengembalikan pengenal nama unik window.
func (w *WebviewWindow) Name() stringContoh:
name := window.Name()
fmt.Println("Window name:", name)
// Ambil window berdasarkan nama nanti
if w, ok := app.Window.GetByName(name); ok {
w.Focus()
}Ukuran dan Posisi
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()
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()
Mengatur dimensi minimum dan maksimum window. Keduanya mengembalikan receiver untuk chaining.
func (w *WebviewWindow) SetMinSize(width, height int) Window
func (w *WebviewWindow) SetMaxSize(width, height int) WindowContoh:
// Cegah window terlalu kecil
window.SetMinSize(800, 600)
// Cegah window terlalu besar
window.SetMaxSize(1920, 1080)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 atas
window.SetPosition(0, 0)
// Posisikan window 100px dari kiri atas
window.SetPosition(100, 100)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()
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()
Membawa window ke depan dan memberikan fokus keyboard.
func (w *WebviewWindow) Focus()Contoh:
// Bawa window ke depan
window.Focus()Status Window
Minimise() / UnMinimise()
Meminimalkan window ke taskbar/dock atau memulihkannya. Minimise() mengembalikan receiver untuk chaining; UnMinimise() tidak mengembalikan nilai.
func (w *WebviewWindow) Minimise() Window
func (w *WebviewWindow) UnMinimise()Contoh:
// Minimalkan window
window.Minimise()
// Pulihkan dari status diminimalkan
window.UnMinimise()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() Window
func (w *WebviewWindow) UnMaximise()Contoh:
// Maksimalkan window
window.Maximise()
// Pulihkan ke ukuran sebelumnya
window.UnMaximise()Fullscreen() / UnFullscreen() / ToggleFullscreen()
Memasuki atau keluar dari mode fullscreen. Fullscreen() mengembalikan receiver untuk chaining.
func (w *WebviewWindow) Fullscreen() Window
func (w *WebviewWindow) UnFullscreen()
func (w *WebviewWindow) ToggleFullscreen()Contoh:
// Masuk fullscreen
window.Fullscreen()
// Keluar fullscreen
window.UnFullscreen()
// Atau toggle
window.ToggleFullscreen()Tidak ada metode SetFullscreen(bool).
IsMinimised() / IsMaximised() / IsFullscreen()
Memeriksa status window saat ini.
func (w *WebviewWindow) IsMinimised() bool
func (w *WebviewWindow) IsMaximised() bool
func (w *WebviewWindow) IsFullscreen() boolContoh:
if window.IsMinimised() {
window.UnMinimise()
}
if window.IsMaximised() {
fmt.Println("Window is maximised")
}
if window.IsFullscreen() {
window.UnFullscreen()
}Konten Window
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 tertanam
window.SetURL("http://wails.localhost/settings.html")
// Navigasi ke URL eksternal (jika diizinkan)
window.SetURL("https://wails.io")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()
Memuat ulang konten window saat ini.
func (w *WebviewWindow) Reload()Contoh:
// Muat ulang halaman saat ini
window.Reload()Catatan: Berguna selama pengembangan atau saat konten perlu diperbarui.
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()
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 window
window.OnWindowEvent(events.Common.WindowFocus, func(e *application.WindowEvent) {
app.Logger.Info("Window gained focus")
})
// Dengarkan kehilangan fokus window
window.OnWindowEvent(events.Common.WindowLostFocus, func(e *application.WindowEvent) {
app.Logger.Info("Window lost focus")
})
// Dengarkan resize window
window.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()
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()
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 tertentu
window.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
SetEnabled()
Mengaktifkan atau menonaktifkan interaksi pengguna dengan window.
func (w *WebviewWindow) SetEnabled(enabled bool)Contoh:
// Nonaktifkan window selama operasi panjang
window.SetEnabled(false)
// Lakukan operasi
performLongOperation()
// Aktifkan kembali window
window.SetEnabled(true)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 putih
window.SetBackgroundColour(application.NewRGB(255, 255, 255))
// Latar belakang gelap dengan alpha penuh
window.SetBackgroundColour(application.NewRGBA(30, 30, 30, 255))SetResizable()
Mengontrol apakah window dapat diubah ukurannya oleh pengguna. Mengembalikan receiver untuk chaining.
func (w *WebviewWindow) SetResizable(resizable bool) WindowContoh:
// Buat window ukuran tetap
window.SetResizable(false)SetAlwaysOnTop()
Mengatur apakah window tetap di atas window lain. Mengembalikan receiver untuk chaining.
func (w *WebviewWindow) SetAlwaysOnTop(alwaysOnTop bool) WindowContoh:
// Jaga window tetap di atas
window.SetAlwaysOnTop(true)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()
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
Linux
Window Linux mendukung opsi khusus platform berikut melalui LinuxWindow:
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
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()
}