go - 无法在 gotk3 应用程序中创建菜单栏

标签 go gtk3

我正在使用 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/

相关文章:

c - 使用 Meson 在 Windows 上构建并运行 GTK 应用程序

json - 转换 JSON 消息的最佳实践

azure - 如何在golang中实现authorization_code授权流程以登录Azure AD

go - 在与 grpc.ClientStreams 交互时是否需要调用 Recv 直到获得 io.EOF?

c - GTK 3.0 给出编译器错误 "Only <gdk/gdkh> can be included directly"

python - 在 mac 上为 python 安装 Gtk 3

使用反引号编译 GTK-app cmd-windows

go - 在 Go 中是否可以访问存储在客户端本地存储中的 JWT token ?

video-streaming - 视频流中的导航,golang 中的反向代理

c - 主循环后的GTK