【发布时间】:2016-11-08 08:39:19
【问题描述】:
在以下示例中,我已将 Notebook 设置为不获取焦点,以便在使用 enable_traversal() 支持的快捷方式从小部件导航到小部件时跳过其选项卡。这主要有效,但不完全有效。如果一个选项卡已经被显示(但没有焦点),按下它的<Alt-Key> 下划线样式的快捷方式会给它焦点。我怎样才能防止这种情况发生?
from tkinter import *
from tkinter import ttk
root = Tk()
nb = ttk.Notebook(root, takefocus = NO)
nb.enable_traversal()
f1 = Frame(nb)
b1a = Button(f1, text = 'Charlie')
b1b = Button(f1, text = 'Delta')
f2 = Frame(nb)
b2a = Button(f2, text = 'Echo')
b2b = Button(f2, text = 'Foxtrot')
b1a.pack()
b1b.pack()
b2a.pack()
b2b.pack()
f1.pack()
f2.pack()
nb.pack()
nb.add(f1, text = 'Alpha', underline = 0)
nb.add(f2, text = 'Bravo', underline = 0)
【问题讨论】:
-
请阅读docs,了解什么是takefocus生效。它可以防止笔记本本身通过焦点遍历获得焦点。不是标签。
-
要清楚,我想防止笔记本顶部的选项卡标签获得焦点,而不是每个选项卡包含的框架。我尝试将每个选项卡设置为不像这样聚焦:
nb.tab(0)['takefocus'] = NO但是,我怀疑这会在选项卡包含的框架上设置选项,而不是选项卡的标签。由于不可见的小部件默认不获取焦点,因此没有观察到任何变化。 -
标签本身应该受到笔记本本身设置为
takefocus = NO的影响。里面的框架是另一回事,但作为基本笔记本一部分的 tabctrl 本身应该是这样的。 但是:如果我没记错的话,该选项只接受那里的内容。所以你应该在添加最后一个标签后设置它。