添加系统托盘菜单 #
自 v2.2.0 版本以来,Fyne 内置了对系统托盘菜单的支持。此功能在 macOS、Windows 和 Linux 计算机上显示一个图标,当点击时,会弹出由应用程序指定的菜单。
由于这是一个特定于桌面的功能,我们首先必须进行运行时检查,以确认应用程序正在桌面模式下运行。为此,我们进行 Go 类型断言以获取对桌面功能的引用:
if desk, ok := a.(desktop.App); ok {
...
}
如果 ok
变量为真,则我们可以使用标准 Fyne 菜单 API 设置菜单,你可能之前在 Window.SetMainMenu
中使用过这个 API。
m := fyne.NewMenu("MyApp",
fyne.NewMenuItem("Show", func() {
log.Println("点击了显示")
}))
desk.SetSystemTrayMenu(m)
将此代码添加到应用程序的设置中,运行应用程序,你会看到系统托盘中显示了一个 Fyne 图标。当你点击它时,会出现一个包含“显示”和“退出”的菜单。
默认图标是 Fyne 标志,你可以通过
应用元数据更改这个设置,或者通过 App.SetIcon
或直接使用 desk.SetSystemTrayIcon
为系统托盘设置应用图标。
管理窗口生命周期 #
默认情况下,当你关闭所有窗口时 Fyne 应用将会退出,这可能不是你希望的系统托盘应用的行为。要覆盖此行为,你可以使用 Window.SetCloseIntercept
功能来覆盖窗口关闭时的操作。在下面的示例中,我们通过调用 Window.Hide()
来隐藏窗口而不是关闭它。在第一次显示窗口之前添加这个。
w.SetCloseIntercept(func() {
w.Hide()
})
隐藏窗口的好处是你可以简单地再次使用 Window.Show()
显示它,如果需要第二次使用相同的内容,这比创建一个新窗口更高效。我们更新之前创建的菜单以显示上面隐藏的窗口。
fyne.NewMenuItem("Show", func() {
w.Show()
}))
完整的应用程序 #
这就是使用 Fyne 设置系统托盘菜单的全部内容!本教程的完整代码如下所示。
package main
import (
"fyne.io/fyne/v2"
"fyne.io/fyne/v2/app"
"fyne.io/fyne/v2/driver/desktop"
"fyne.io/fyne/v2/widget"
)
func main() {
a := app.New()
w := a.NewWindow("SysTray")
if desk, ok := a.(desktop.App); ok {
m := fyne.NewMenu("MyApp",
fyne.NewMenuItem("Show", func() {
w.Show()
}))
desk.SetSystemTrayMenu(m)
}
w.SetContent(widget.NewLabel("Fyne 系统托盘"))
w.SetCloseIntercept(func() {
w.Hide()
})
w.ShowAndRun()
}