Всплывающее меню Python3 Tkinter не закрывается автоматически при нажатии в другом месте
м работает Python 3.3.3 (и сейчас яЯ в Ubuntu, но я также работаю на Mac и Windows, которых у меня нетпока не проверено). У меня есть объект Treeview, который реагирует на щелчок правой кнопкой мыши по элементам и показывает контекстное меню в зависимости от того, что вы нажимаете ... но ямы заметили, что если вы щелкнете правой кнопкой мыши где-нибудь еще, когда исходное меню будет открыто, оно просто откроет другое.
На самом деле, нормальное нажатие неих тоже не спрятать. Даже когда я закрываю окно, меню все еще остается плавающим. Единственный способ заставить их уйти - это нажать один из вариантов.
Конечный результат таков:
Мой код для меню выглядит следующим образом:
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