无法在tkinter.ttk.Notebook(Python 3.5.1)中绑定,

无法在tkinter.ttk.Notebook(Python 3.5.1)中绑定,,python,tkinter,ttk,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) se

我想为用户提供多个键绑定,以便在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_遍历产生预期的行为,允许控件移位选项卡和控件选项卡导航。和绑定也会产生所需的结果,从而允许控件PageUp和控件PageDown导航

然而,第三种选择失败了。我期望并允许通过Control-[和Control-]进行导航,但它们什么也不做。我通过检查适当的Tk手册页来确认键符号是正确的,并且在Python解释器中键符号不会产生错误


据我所知,tkinter不应该对绑定到同一回调的两个事件有任何问题。我是否在某个地方出错,或者支架键不受支持?谢谢

绑定可能没有什么问题。如果您绑定到笔记本本身,那么它必须具有焦点,绑定才能注册,请选择一个选项卡以获得焦点。如果您想让绑定切换notebook选项卡,不管焦点是什么,那么就绑定到本例中的顶级窗口

示例代码:

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

绑定可能没有什么问题。如果您绑定到笔记本本身,那么它必须具有焦点,绑定才能注册,请选择一个选项卡以获得焦点。如果您想让绑定切换notebook选项卡,不管焦点是什么,那么就绑定到本例中的顶级窗口

示例代码:

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

发现了问题。尽管没有引发异常,但回调函数中仍存在问题。一旦修复,一切都按预期进行。我感到困惑的原因是Notebook.enable_遍历方法提供了两组绑定:Control Tab和Control Shift Tab,以及Control PageUp和Control PageDown。第二对绑定未记录在tkinter.ttk中。发现问题。尽管没有引发异常,但回调函数中仍存在问题。一旦修复,一切都按预期进行。我感到困惑的原因是Notebook.enable_遍历方法提供了两组绑定:Control Tab和Control Shift Tab,以及Control PageUp和Control PageDown。第二对绑定未记录在tkinter.ttk中。