(原) Wails, golang的gui

原创文章,请后转载,并注明出处。

官方V2中文文档

网上示例较少,好在有中文文档可以啃

这个示例主要是添加了菜单,弹出消息框,文件打开对话框等

package main

import (
	"context"
	"fmt"
	"os"

	"github.com/wailsapp/wails/v2/pkg/menu"
	"github.com/wailsapp/wails/v2/pkg/menu/keys"
	"github.com/wailsapp/wails/v2/pkg/runtime"
)

type App struct {
	ctx context.Context
	ti  *TrayIcon
}

// NewApp 创建一个新的 App 应用程序
func NewApp() *App {
	return &App{}
}

func (b *App) GetCtx() context.Context {
	return b.ctx
}

// startup 在应用程序启动时调用
func (b *App) startup(ctx context.Context) {
	// 在这里执行初始化设置
	b.ctx = ctx
	b.ti = NewTrayIcon()
	b.ti.BalloonClickFunc = b.showWindow
	b.ti.TrayClickFunc = b.showWindow
	go b.ti.RunTray()

	// 菜单------------------------------------------------------

	Update := menu.Text("检查更新", nil, HelpUpdate)
	Update.Disabled = true
	Fullscreen := menu.Checkbox("全屏显示", true, nil, HelpFullScreen)
	myMenu := menu.NewMenuFromItems(
		menu.SubMenu("文件(&F)", menu.NewMenuFromItems(
			menu.Text("打开文件(&O)", keys.CmdOrCtrl("o"), OpenFile),
			menu.Separator(),
			menu.Text("退出", keys.CmdOrCtrl("q"), func(_ *menu.CallbackData) {
				runtime.Quit(ctx)
			}),
		)),
		menu.SubMenu("帮助(&H)", menu.NewMenuFromItems(
			menu.Text("如何使用", nil, HelpUse),
			Update,
			Fullscreen,
			menu.Text("关于我们", nil, HelpAbout),
		)),
	)

	runtime.MenuSetApplicationMenu(ctx, myMenu)

}

func HelpFullScreen(c *menu.CallbackData) {
	fmt.Println("----", c.MenuItem.Checked)
}

func HelpUpdate(c *menu.CallbackData) {
	fmt.Println("----", c.MenuItem.Label)
}

func OpenFile(c *menu.CallbackData) {
	fmt.Println("----", c.MenuItem.Label)
}

func HelpUse(c *menu.CallbackData) {
	fmt.Println("----", c.MenuItem.Label)
}

func HelpAbout(c *menu.CallbackData) {
	fmt.Println("----", c.MenuItem.Label)
}

// ------------------------------------------------------

// domReady 在前端Dom加载完毕后调用
func (b *App) domReady(ctx context.Context) {
	// 在这里添加你的操作
}

func (b *App) showWindow() {
	//runtime.LogDebug(a.ctx, "showWindow")
	runtime.WindowShow(b.ctx)
}

// 在应用程序终止时被调用
func (b *App) shutdown(ctx context.Context) {
	// 在此处做一些资源释放的操作
}

// Greet returns a greeting for the given name
func (b *App) Greet(name string) string {
	return fmt.Sprintf("Hello %s, It's show time!", name)
}

func (b *App) Quit() {
	b.ti.Dispose()
	runtime.Quit(b.ctx)
}

// 打开文件对话框
func (b *App) OpenFile() {
	var d runtime.OpenDialogOptions
	cur, _ := os.Getwd()
	d.DefaultDirectory = cur
	d.Title = "打开文件"

	fmt.Println(runtime.OpenFileDialog(b.ctx, d))
}

func (b *App) MessageBox() {
	fmt.Println(runtime.MessageDialog(b.ctx, runtime.MessageDialogOptions{
		Type:    runtime.InfoDialog,
		Title:   "一个消息",
		Message: "这是一个消息",
	}))
}

相关文章