查找Ttk Notebook的当前选定选项卡

Mat*_*hew 9 python tkinter ttk

我有一个包含8个框架的Ttk Notebook小部件 - 所以,8个标签.每个框架都包含一个Text小部件.我在Notebook小部件外面有一个按钮,我想在按下此按钮时将文本插入当前选项卡Text小部件.

这似乎需要确定当前选择Notebook中的哪个小部件,但我似乎无法找到如何执行此操作.如何找到当前选中的标签?

或者,我该如何实现我想要的?

如果它有帮助,这是我的笔记本的代码:

self.nb = Notebook(master)
self.nb.pack(fill='both', expand='yes', padx=10, pady=10)
self.frames = []
self.texts = []
for i in xrange(8):
  self.frames.append(Frame())
  self.nb.add(self.frames[i])
  self.texts.append(Text(self.frames[i]))
  self.texts[i].pack(fill='both')
Run Code Online (Sandbox Code Playgroud)

Fab*_*dre 17

您可以通过select方法检索选定的选项卡.但是,此方法返回一个tab_id,它不是很有用.index将其转换为所选标签的编号.

>>> nb.select()
'.4299842480.4300630784'
>>> nb.index(nb.select())
2
Run Code Online (Sandbox Code Playgroud)

请注意,您还可以使用获取有关所选选项卡的更多信息 tab

>>> nb.tab(nb.select(), "text")
'mytab2'
Run Code Online (Sandbox Code Playgroud)

您可以查看Notebook参考文档:http://docs.python.org/3/library/tkinter.ttk.html#notebook


小智 5

您可以使用"current"关键字获取当前选定的标签:

noteBook.index("current")
Run Code Online (Sandbox Code Playgroud)

请访问以下网站: https: //docs.python.org/2/library/ttk.html#tab-identifiers 24.2.5.3.标签标识符


Gar*_*127 5

有两种简单的方法可以查看选择了哪个选项卡:

nb.select()  # returns the Tab NAME (string) of the current selection
Run Code Online (Sandbox Code Playgroud)

nb.index('current') # returns the Tab INDEX (number) of the current selection
Run Code Online (Sandbox Code Playgroud)

.select()方法还可用于通过 选择当前处于活动状态的选项卡nb.select(tabId)。如果没有 arg,它会返回当前选择的 tabId(以“名称”形式)。

.index(tabId)转换一个tabId为数值索引。它还可以采用字符串“end”,该字符串将返回选项卡的数量。所以,nb.index(tkinter.END)就像len()一个笔记本小部件的方法。

当没有选项卡时,.select()返回一个空字符串,但.index('current')抛出异常。所以,如果你想要索引,我会说

if nb.select():
    idx = nb.index('current')
Run Code Online (Sandbox Code Playgroud)

是最好的方法。

在您的特定情况下,您可能希望获取当前笔记本选项卡名称,然后通过该nametowidget()方法将该名称转换为实际的子文本小部件以进行操作。所以...

tabName = notebook.select()
if tabName:
    textWidget = notebook.nametowidget(tabName) # here, 'notebook' could be any widget
    textWidget.insert(pos, text, tags)
Run Code Online (Sandbox Code Playgroud)

nametowidget(name)方法将 Tkinter 名称映射到实际小部件。它是一种可由任何实际小部件调用的方法。