2017-09-04 1 views
2

Ich verwende gotk3 (ein Projekt, das Go-Bindungen für GTK + 3 bereitstellt) zum Schreiben einer einfachen GUI-Anwendung. Ich möchte eine Menüleiste in der Anwendung zeigen, aber jetzt zeigt es kein Menü mehr (getestet auf MacOSX und Linux). Dies ist der Code:Ich kann keine Menüleiste in einer gotk3-Anwendung erstellen

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() 
} 

Da es nicht das glaube ich nicht funktioniert, dass Attach() ist die richtige Funktion, dies zu tun. Ich habe nie mit GTK + gearbeitet, also fast keine Ahnung, was ich tun oder wohin ich schauen soll. Irgendein Hinweis?

Danke, Andrea

+0

Hey Andrea, tut mir leid, ich kann nicht mit dem Paket helfen, das Sie verwenden, wollte ich nur vorschlagen, dass dies eine Alternative - ich habe vor kurzem für Cross-Plattform-UI in gehen mit großem Erfolg (keine Zugehörigkeit) - https://github.com/sciter-sdk/go-sciter - vielleicht einen Blick wert, benutzt auch gtk für Mac/Nix, bietet aber auch Win-Support und kommt mit Hunderten von Beispielen und hat ein sehr hilfreiches Forum – WebweaverD

Antwort

0

OK, fand ich heraus, wie es zu tun. Im Anschluss an diese example habe ich die Schritte verstanden, die erforderlich sind, um ein Menü auf GTK zu erstellen. Der bearbeitete Teil ist:

// 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) 

Jetzt wird das Menü über das Etikett angezeigt (auf MacOsX), aber zumindest ist es angezeigt.