systray
systray 是一个跨平台的 Go 库,用于在通知区域放置图标和菜单。
特性
- 支持 Windows、macOS 和 Linux
- 菜单项可以被选中和/或禁用
- 大多数函数可以从任何 goroutine 中调用
API
func main() {
systray.Run(onReady, onExit)
}
func onReady() {
systray.SetIcon(icon.Data)
systray.SetTitle("超棒应用")
systray.SetTooltip("非常棒超级棒")
mQuit := systray.AddMenuItem("退出", "退出整个应用")
// 设置菜单项的图标。仅在 Mac 和 Windows 上可用。
mQuit.SetIcon(icon.Data)
}
func onExit() {
// 在此处进行清理
}
注意:此包需要 cgo,因此请确保在构建之前设置 CGO_ENABLED=1
。
尝试示例应用!
已安装 Go v1.12+ 或更高版本?以下是在 macOS 上开始使用的示例:
git clone https://github.com/getlantern/systray
cd systray/example
env GO111MODULE=on go build
./example
在 Windows 上,你应该这样构建:
env GO111MODULE=on go build -ldflags "-H=windowsgui"
现在在你的菜单栏中查找超棒应用!
Webview 示例
webview_example
目录下的代码用于演示如何与其他 UI 元素共存。请注意,该示例在 macOS 10.15 Catalina 之前的版本上不起作用。
平台说明
Linux
- 构建应用需要安装 gcc 以及
gtk3
和libayatana-appindicator3
开发头文件。对于 Debian 或 Ubuntu,你可以使用以下命令安装:
sudo apt-get install gcc libgtk-3-dev libayatana-appindicator3-dev
在 Linux Mint 上,还需要 libxapp-dev
。
如果你需要支持较旧的 libappindicator3
库,可以在构建时传递构建标志 legacy_appindicator
。例如:
go build -tags=legacy_appindicator
要构建 webview_example
,你还需要安装 libwebkit2gtk-4.0-dev
并删除 webview_example/rsrc.syso
(这是 Windows 上需要的)。
Windows
- 为了避免在应用启动时打开控制台,请使用以下编译标志:
go build -ldflags -H=windowsgui
macOS
在 macOS 上,你需要创建一个应用程序包来封装二进制文件;只需创建具有以下最小结构和资源的文件夹:
SystrayApp.app/
Contents/
Info.plist
MacOS/
go-executable
Resources/
SystrayApp.icns
当作为应用程序包运行时,你可能想在 Info.plist 中添加以下一项或两项:
<!-- 避免图标和文本模糊 -->
<key>NSHighResolutionCapable</key>
<string>True</string>
<!-- 避免在 Dock 上显示应用 -->
<key>LSUIElement</key>
<string>1</string>
请参阅官方 Apple 文档。
在 macOS 上,可以使用 systray.SetRemovalAllowed(true)
设置底层的 NSStatusItemBehavior
。启用后,用户可以通过 cmd 拖动将图标从菜单栏移除。