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

时间:2017-09-04 07:42:09

标签: go gtk3

我正在使用gotk3(一个为GTK + 3提供Go绑定的项目)来编写一个简单的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 +,因此几乎不知道该做什么或在哪里看。任何提示?

谢谢, 安德烈

1 个答案:

答案 0 :(得分:0)

好的,我发现了怎么做。在此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上),但至少显示了它。