无法绑定tkinter.ttk.Notebook中的<control-bracketleft>,<control-bracketright>(Python 3.5.1)

时间:2016-07-04 17:29:12

标签: python tkinter ttk

我想在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对于绑定到同一回调的两个事件不应该有任何问题。我在某处犯了错误,还是支架键不受支持?谢谢!

1 个答案:

答案 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()