2014-02-05 95 views
2

我在wxPython中設置了這個,但是現在我正在爲GTK3/PyGObject重寫它,而且我有點迷失在這裏。基本上,我的代碼掃描一個目錄,並將文件的名稱添加到菜單項。我無法讓它在PyGObject中工作。這裏是當前的代碼:以編程方式將新菜單項添加到菜單項PyGObject中?

# Populate profiles menu 
     profileMenu = self.builder.get_object("profilesMenu") 
     profiles = os.listdir("/etc/netctl/") 
     # Iterate through profiles directory, and add to "Profiles" Menu # 
     for i in profiles: 
      if os.path.isfile("/etc/netctl/" + i): 
       profile = profileMenu.set_menu_item(i) 

我試過各種profileMenu。*想法。我想第一個是set_submenu,它返回以下錯誤:

[[email protected] NetGUI]$ sudo python main.py 
Traceback (most recent call last): 
    File "main.py", line 466, in <module> 
    netgui() 
    File "main.py", line 70, in __init__ 
    self.InitUI() 
    File "main.py", line 140, in InitUI 
    profile = profileMenu.set_submenu(i) 
TypeError: argument submenu: Expected Gtk.Widget, but got str 

目前一個只是說set_menu_item不存在,所以很明顯這是行不通的。我應該如何解決這個問題?我完全失去了。我知道爲什麼set_submenu不起作用,我不知道如何解決它。我將如何創建一個Gtk.Widget的文件名?

回答

2

您要找的是append()。此外,常見的層次是:

  • GtkMenuBar
    • GtkMenuItem
      • GtkMenu
        • GtkMenuItem
        • GtkImageMenuItem
        • GtkCheckMenuItem
        • GtkRadioMenuItem
        • GtkSeparatorMenuItem

你可以找到一個完整的例子在這裏:

https://gist.github.com/carlos-jenkins/8851942

代碼的相關部分是:

content = [ 
     'Path to file 1', 
     'Path to file 2', 
     'Path to file 3', 
     'Path to file 4', 
    ] 

    # Create menu 
    menu = Gtk.MenuItem(label='My Menu {}'.format(num)) 
    menu.set_submenu(Gtk.Menu()) 

    for p in content: 
     menu.get_submenu().append(Gtk.MenuItem(label=p)) 

    self.menubar.append(menu) 
    menu.show_all() 
相關問題