2017-09-04 11 views
2

私は簡単なGUIアプリケーションを書くためにgotk3(GTK + 3のGoバインディングを提供するプロジェクト)を使用しています。アプリケーションにメニューバーを表示したいのですが、今はメニューが表示されません(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

申し訳ありません使用しているパッケージを手伝ってもらえませんでしたが、私はちょうどこれを代替案として提案したかったのです - 最近、クロスプラットフォームのuiを大成功(アフィリエイトなし) - https: /github.com/sciter-sdk/go-sciter - 一見の価値があるかもしれませんし、gtkを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上)に表示されますが、少なくとも表示されます。

関連する問題