我正在運行Python 3.3.3(現在我在Ubuntu上,但我也開發了Mac和Windows,我還沒有測試過)。我有一個Treeview對象,它響應右鍵單擊項目並顯示一個上下文菜單,具體取決於您單擊的內容......但是我注意到,如果您在原始菜單啓動時在其他位置右鍵單擊,則會打開另一個菜單。Python3 Tkinter彈出菜單不會自動關閉,當點擊其他地方
實際上,正常點擊並不會隱藏它們。即使關閉窗口,菜單仍然保持浮動狀態。讓他們離開的唯一方法是點擊其中一個選項。
最終的結果是這樣的:
我的菜單代碼如下:
def rightclick_listitem(self, event):
rowitem = self.sources.identify('item', event.x, event.y)
if rowitem == '':
print('Right clicked an empty space.')
return
# user right clicked something.
self.sources.selection_set(rowitem)
rcmenu = Menu(self.root, tearoff=0)
plugin_disabled=self.sources.item(rowitem, 'values')[0] == 'Disabled'
if plugin_disabled:
rcmenu.add_command(label='Plugin is disabled...',
command=self.plugin_disabled_click)
rcmenu.add_command(label='Plugin options',state='disabled' if plugin_disabled else 'active')
rcmenu.add_command(label='Uninstall plugin')
rcmenu.post(event.x_root, event.y_root)
調用此代碼位於此處的代碼:
#RIGHTMOUSE is a variable that changes based on OS due to the way Mac OSX works
#sources is the treeview object
self.sources.bind(RIGHTMOUSE, self.rightclick_listitem)
我搜索一下,只有一些人沒有回答問相同的問題。一般來說,我對tkinter和python還是有些新鮮的,並沒有看到任何有關這方面的事情。我還將其他操作綁定到樹視圖。
如果您需要更多的源代碼我的項目是在這裏:
任何幫助表示讚賞https://github.com/Mgamerz/Fresh-Set-of-Images(freshsetofimages.py)。
而且使這個出現所需的插件:https://github.com/Mgamerz/fsoi_plugins
一旦彈出窗口消失,對該段內存的引用就會丟失,垃圾收集器會在下次運行時拾取它,就像在Java中一樣。這有什麼不同嗎?用戶通常不會右鍵點擊我的應用程序,他們將永遠不會看到此菜單,除非他們想改變某些內容,這種情況不會經常發生。 – Mgamerz
使用tk_popup可以解決出現多個上下文菜單的問題(如果只製作一個菜單),但不會使其他地方的左鍵單擊使其消失,除此之外,還可以設置其中的某些設置我不知道。你怎麼修好它的?或者您是否滿意點擊關閉菜單的選項? – Shule