Menu kontekstowe Python3 Tkinter nie zamyka się automatycznie po kliknięciu w innym miejscu
Używam Pythona 3.3.3 (a teraz jestem na Ubuntu, ale rozwijam się także na Macu i Windowsie, którego jeszcze nie testowałem). Mam obiekt Treeview, który odpowiada na elementy prawym przyciskiem myszy i pokazuje menu kontekstowe w zależności od tego, co klikniesz ... ale zauważyłem, że jeśli klikniesz prawym przyciskiem myszy gdzieś indziej, gdy oryginalne menu jest w górze, po prostu otworzy się kolejne.
W rzeczywistości normalne kliknięcie również ich nie ukrywa. Nawet gdy zamknę okno, menu nadal pozostają pływające. Jedynym sposobem na ich odejście jest kliknięcie jednej z opcji.
Efekt końcowy jest następujący:
Mój kod menu jest następujący:
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)
Kod wywołujący ten kod znajduje się tutaj:
#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)
Wyszukałem hasło i tylko niektórzy ludzie zadawali to samo pytanie bez odpowiedzi. Nadal jestem trochę nowy w tkinter i python w ogóle i nic o tym nie widziałem. Łączę inne działania z widokiem drzewa.
Jeśli potrzebujesz więcej kodu źródłowego, mój projekt jest tutaj:https://github.com/Mgamerz/Fresh-Set-of-Images (freshsetofimages.py)
Każda pomoc jest doceniana.
A wtyczki wymagane do tego pojawienia się:https://github.com/Mgamerz/fsoi_plugins