2017-09-04 99 views
2

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

回答

0

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上)的菜單,但至少它的顯示。