我正在使用 gotk3 (一个为 GTK+3 提供 Go 绑定(bind)的项目)用于编写一个简单的 GUI 应用程序。我想在应用程序中显示一个菜单栏,但现在它不显示任何菜单(在 MacOSX 和 Linux 上测试过)。这是代码:
package main
import (
"github.com/gotk3/gotk3/gtk"
"log"
)
func main() {
gtk.Init(nil)
// creates window
win, err := gtk.WindowNew(gtk.WINDOW_TOPLEVEL)
if err != nil {
log.Fatal("Unable to create window:", err)
}
win.SetDefaultSize(800, 600)
win.Connect("destroy", func() {
gtk.MainQuit()
})
// creates grid and label
grid, err := gtk.GridNew()
if err != nil {
log.Fatal("Unable to create grid:", err)
}
label, _ := gtk.LabelNew("Hello, gotk3!")
grid.Add(label)
// creates menu
menuBar, err := gtk.MenuBarNew()
if err != nil {
log.Fatal("Unable to create menubar:", err)
}
menu, err := gtk.MenuNew()
if err != nil {
log.Fatal("Unable to create menu:", err)
}
menu.SetName("File")
menuItem, err := gtk.MenuItemNewWithLabel("Open")
if err != nil {
log.Fatal("Unable to create menuitem:", err)
}
menu.Append(menuItem)
// attaches menubar to grid
grid.Attach(menuBar, 0, 0, 200, 200)
// shows window
win.Add(grid)
win.ShowAll()
gtk.Main()
}
因为它不起作用,我认为 Attach()
不是执行此操作的正确函数。我从未使用过 GTK+,所以几乎不知道该做什么或去哪里看。有什么提示吗?
谢谢, 安德里亚
最佳答案
好的,我知道怎么做了。按照这个 example我了解在 GTK 上创建菜单所需的步骤。编辑的部分是:
// creates menu
menuBar, err := gtk.MenuBarNew()
if err != nil {
log.Fatal("Unable to create menubar:", err)
}
fileMenu, err := gtk.MenuNew()
if err != nil {
log.Fatal("Unable to create menu:", err)
}
fileMenuItem, err := gtk.MenuItemNewWithLabel("File")
if err != nil {
log.Fatal("Unable to create menuitem:", err)
}
openMenuItem, err := gtk.MenuItemNewWithLabel("Open")
if err != nil {
log.Fatal("Unable to create menuitem:", err)
}
fileMenuItem.SetSubmenu(fileMenu)
fileMenu.Append(openMenuItem)
menuBar.Append(fileMenuItem)
gtkGrid.Attach(menuBar, 0, 0, 200, 200)
win.Add(gtkGrid)
现在菜单显示在标签上(在 MacOsX 上),但至少它显示了。
关于go - 无法在 gotk3 应用程序中创建菜单栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46032434/