我想在tkinter.ttk.Notebook对象中为用户提供多个用于制表符遍历的键绑定。我正在使用以下代码:
self.notebook = ttk.Notebook(self)
self.notebook.enable_traversal()
self.notebook.bind('<Control-Key-Prior>', self.priorTab)
self.notebook.bind('<Control-Key-Next>', self.nextTab)
self.notebook.bind('<Control-bracketleft>', self.priorTab)
self.notebook.bind('<Control-bracketright>', self.nextTab)
enable_traversal()产生预期的行为,允许Control-Shift-Tab和Control-Tab导航。和绑定也产生了所需的结果,允许Control-PageUp和Control-PageDown导航。
然而,第三种选择失败了。我期望并允许通过Control- [和Control-]进行导航,但它们什么都不做。我通过检查相应的Tk手册页确认了键符号是正确的,并且键盘在Python解释器中不会产生错误。
根据我的理解,tkinter对于绑定到同一回调的两个事件不应该有任何问题。我在某处犯了错误,还是支架键不受支持?谢谢!
答案 0 :(得分:0)
绑定可能没什么问题。如果您绑定到笔记本本身,那么它必须具有焦点才能注册绑定(选择一个选项卡以获得焦点)。如果您希望绑定切换笔记本选项卡,无论焦点是什么,然后绑定到顶级窗口(在此示例根目录中)
示例代码:
import tkinter as tk
from tkinter import ttk
def change_tab(delta):
print("triggered")
tabs = note.tabs()
note.select( tabs[(tabs.index(note.select()) + delta) % len(tabs)] )
root = tk.Tk()
root.minsize(250, 250)
note = ttk.Notebook(root, height = 200, width = 200)
note.pack()
#note.enable_traversal()
for i in range(1, 6):
note.add(tk.Frame(note), text = "Tab #%d" % i)
# Note requires focus for bindings to work
# Change to root for bindings to work anywhere in the app
note.bind('<Control-[>', lambda e: change_tab(-1))
note.bind('<Control-]>', lambda e: change_tab(1))
root.mainloop()