(原) Wails 最简模块

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

默认模板由main.go(配置和运行)和app.go(应用逻辑)两个文件构成

app.go

type App struct {
    ctx context.Context
}

func NewApp() *App {
    return &App{}
}

func (a *App) startup(ctx context.Context) {
    a.ctx = ctx
}

func (a *App) shutdown(ctx context.Context) {
}

main.go


//go:embed frontend/dist
var assets embed.FS

func main() {

   app := NewApp()

   err := wails.Run(&options.App{
       Title:             "My App",
       Width:             800,
       Height:            600,
       Assets:            &assets,
       OnStartup:  app.startup,
       OnShutdown: app.shutdown,
   })
   if err != nil {
      log.Fatal(err)
   }
}

绑定方法

app.go

type App struct {
    ctx context.Context
}

func NewApp() *App {
    return &App{}
}

func (a *App) startup(ctx context.Context) {
    a.ctx = ctx
}

func (a *App) shutdown(ctx context.Context) {
}

func (a *App) Greet(name string) string {
    return fmt.Printf("Hello %s!", name)
}

在主程序main.go中告诉wails想要绑定什么

func main() {
     app := NewApp()
     err := wails.Run(&options.App{
  	        Title:             "My App",
            Width:             800,
            Height:            600,
            OnStartup:  app.startup,
            OnShutdown: app.shutdown,
            Bind: []interface{}{
       	            app,
            },
     })
     if err != nil {
     	log.Fatal(err)
     }
}     

在前端的main.js中

let nameElement = document.getElementById("name");

window.greet = function () {
  let name = nameElement.value;

  // 调用Go中的函数:App.Greet(name)
  window.go.main.App.Greet(name).then((result) => {
    document.getElementById("result").innerText = result;
  });
};

nameElement.onkeydown = function (e) {
  if (e.code === "Enter") {
    window.greet();
  }
};

窗口

窗口标题、窗口全屏、窗口居中、窗口重新加载、显示窗口、隐藏窗口、设置窗口尺寸、获取窗口尺寸、设置窗口最小尺寸、设置窗口最大尺寸、设置/获取窗口位置、窗口最大化、窗口最大化切换、窗口最小化、窗口设置 RGBA

对话框

打开目录对话框、打开文件对话框、打开多个文件对话框、保存文件对话框、消息对话框


接下来看看事件是如何交互的。有中文文档,却完全没有一个示例……

相关文章