在我一直努力學習更多關於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 "."
如何從我選擇的項目中獲取數據作爲我的右鍵單擊事件的一部分?
嗯 - 選擇的項目是一個對象,它是列表的一部分,而不是單個字符串。你會怎麼處理? – ccwhite1 2011-03-28 15:42:52
@ 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