2011-03-28 88 views
3

在我一直努力學習更多關於python的內容時,我試圖向我的mp3管理器程序添加一個右鍵單擊事件。目前的工作是顯示菜單和所有選項。不工作的是從菜單中選擇的功能沒有執行,因爲我認爲它們應該是。這些代碼大部分來自另一個網站上的「如何」。python:右鍵單擊列表菜單上未顯示項目選擇

這裏有右鍵菜單選項

menu_titles = ["Remove Selection from list", 
       "Delete Selection from system", 
       "Move Selection", 
       "Copy Selection", 
       "Print Selection"] 

menu_title_by_id = {} 
for title in menu_titles: 
    menu_title_by_id[ wxNewId() ] = title 

正在運行時,右鍵單擊事件發生

def RightClickCb(self, event): 
    # record what was clicked 
    self.list_item_clicked = right_click_context = event.GetText() 

    ### 2. Launcher creates wxMenu. ### 
    menu = wxMenu() 
    for (id,title) in menu_title_by_id.items(): 
     ### 3. Launcher packs menu with Append. ### 
     menu.Append(id, title) 
     ### 4. Launcher registers menu handlers with EVT_MENU, on the menu. ### 
     EVT_MENU(menu, id, self.MenuSelectionCb) 

    ### 5. Launcher displays menu with call to PopupMenu, invoked on the source component, passing event's GetPoint. ### 
    self.MainPanel.PopupMenu(menu, event.GetPoint()) 
    menu.Destroy() # destroy to avoid mem leak 

def MenuSelectionCb(self, event): 
    # do something 
    operation = menu_title_by_id[ event.GetId() ] 
    target = self.list_item_clicked 
    print 'Perform "%(operation)s" on "%(target)s."' % vars() 

我期望能獲得當我​​做了右鍵單擊,然後什麼碼選擇菜單中的一個選項是輸出

Perform "Print Selection" on "<data about the selection here>" 

我得到的是

Perform "Print Selection" on "." 

如何從我選擇的項目中獲取數據作爲我的右鍵單擊事件的一部分?

回答

1

也許你應該在的地方event.GetText()

使用event.GetString()here

你的代碼似乎已經過時壽,結合事件應該這樣做:

menu.Bind(wx.EVT_MENU, self.MenuSelectionCb, id=id) 

而且,如果你綁定所有您可以爲所有ID綁定一次相同功能的ID:

menu.Bind(wx.EVT_MENU, self.MenuSelectionCb) 
+0

嗯 - 選擇的項目是一個對象,它是列表的一部分,而不是單個字符串。你會怎麼處理? – ccwhite1 2011-03-28 15:42:52

+0

@ ccwhite1:[MenuItems](http://www.wxpython.org/docs/api/wx.MenuItem-class.html)不允許耦合客戶端數據(如[ListBox](http://www.wxpython .org/docs/api/wx.ListBox-class.html#Insert)does)所以我建議你繼續使用字典使用MenuItem id作爲鍵和你的對象作爲值,所以你可以像self.my_data_dict [event。 GETID()] – neurino 2011-03-28 20:14:36