バックチェックボタンが選択されるたびビューを開きます。
import tkinter as tk
root = tk.Tk()
test1, test2 = tk.BooleanVar(), tk.BooleanVar()
def cb():
print(test1.get(), test2.get())
root.tk.call('::tk::TraverseToMenu', root, 'v')
menubar = tk.Menu(root)
viewMenu = tk.Menu(menubar, tearoff = 0)
viewMenu.add_checkbutton(label = "Obstacles", variable = test1, command=cb)
viewMenu.add_checkbutton(label = "Ground", variable = test2, command=cb)
menubar.add_cascade(menu = viewMenu, label = "View")
root.config(menu = menubar) # win = tk.Tk()
root.mainloop()
を詳細hereとhereを参照してください。 - Vが開きますtraverse_to_menu
へ
import tkinter as tk
root = tk.Tk()
if root._windowingsystem == 'win32':
import ctypes
keybd_event = ctypes.windll.user32.keybd_event
alt_key = 0x12
key_up = 0x0002
def traverse_to_menu(key=''):
if key:
ansi_key = ord(key.upper())
# press alt + key
keybd_event(alt_key, 0, 0, 0)
keybd_event(ansi_key, 0, 0, 0)
# release alt + key
keybd_event(ansi_key, 0, key_up, 0)
keybd_event(alt_key, 0, key_up, 0)
else:
# root._windowingsystem == 'x11'
def traverse_to_menu(key=''):
root.tk.call('tk::TraverseToMenu', root, key)
test1, test2 = tk.BooleanVar(), tk.BooleanVar()
menubar = tk.Menu(root)
viewMenu = tk.Menu(menubar, tearoff = 0)
viewMenu.add_checkbutton(label = "Obstacles", variable = test1,
command=lambda : traverse_to_menu('v'))
viewMenu.add_checkbutton(label = "Ground", variable = test2,
command=lambda : traverse_to_menu('v'))
menubar.add_cascade(menu = viewMenu, label = "View")
root.config(menu = menubar) # win = tk.Tk()
root.mainloop()
key
変数は'v'
としてAltキーで次のように非常に類似したコードを書くことができ、Windowsの特殊なケースhereを占め回答に基づいて
キーボードからのメニュー。 key
のように、デフォルトでキーボードを使用してメニューを開く非変更キーである必要があります。
メニューを作成してこれまでの内容を確認できるコードスニペットを含めることができますか?このようにして、あなたを手伝ってくれる人は最初から始めなくてもいいです。 –
質問に[mcve]を含めてください。 – Novel
btw:メニューには 'tearoff'というオプションがありますので、メニューを切り取ることができます(メニューバーから切り取ることができます)。ポップアップメニューとして表示されます。少なくともそれはLinux上で動作します。 – furas