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

问题描述:

我正在使用gotk3(一个为GTK + 3提供Go绑定的项目)来编写简单的GUI应用程序。我想在应用程序中显示一个菜单栏,但现在它不显示任何菜单(在MacOSX和Linux上都进行了测试)。这是代码:无法在gotk3应用程序中创建菜单栏

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 +,所以几乎不知道该做什么或在哪里寻找。任何提示?

感谢, 安德烈

+0

嘿安德烈,对不起,我不能帮助你正在使用的软件包,我只是想提出这个替代方案 - 我一直在使用最近的跨平台用户界面,取得了巨大的成功(无隶属关系) - https:/ /github.com/sciter-sdk/go-sciter - 可能值得一看,也使用gtk for mac/nix,但也提供了赢得支持,并附带数百个示例,并有一个非常有用的论坛 – WebweaverD

OK,我发现了如何做到这一点。继此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上)的菜单,但至少它的显示。