如何从 ttk.Notebook 选项卡获取小部件对象?

BPS*_*BPS 0 python tk-toolkit tkinter

我有 ttk.Notebook 类的笔记本小部件。在这个笔记本中,我添加了许多标签:

notebook.add(child=my_object, text='my tab')

如何获取选项卡对象而不是选项卡名称?

更新 1

所以,有儿童词典。好的,带来下一个问题。

我真正想做的是在 Notebook 中操作活动选项卡的对象。所以我有这个:

notebook.children[notebook.select().split('.')[2]])
Run Code Online (Sandbox Code Playgroud)

但它看起来很丑。不幸的是, select() 返回的小部件名称与 children[] 中的小部件名称格式不完全相同。在这种情况下,是否有任何方法可以将一种格式可靠地转换为另一种格式,或者 split() 永远不会失败?

这是问题的演示:

#!/usr/bin/env python3

from tkinter import *
from tkinter.ttk import *


class App(Tk):
    def __init__(self):
        super().__init__()
        notebook = Notebook(self)
        notebook.add(child=Frame(notebook), text='tab1')
        notebook.add(child=Frame(notebook), text='tab2')
        notebook.add(child=Frame(notebook), text='tab3')
        notebook.pack()

        print('Tabs are: ', notebook.children.keys())
        print('Active tab: ', notebook.select())
        print(type(notebook.children[notebook.select().split('.')[2]]))

App().mainloop()
Run Code Online (Sandbox Code Playgroud)

Gar*_*127 5

notebook.tabs()调用返回与子小部件对象对应的“选项卡名称”列表。调用someWidget.nametowidget(tab_name)解析为与该选项卡关联的子小部件。

换句话说, Notebook.tabs()方法返回 Notebook 子项名称的列表。

对于您的更新:

同上,只是现在是:

active_object = notebook.nametowidget(notebook.select())
Run Code Online (Sandbox Code Playgroud)

不同版本的 Python 使用不同的命名约定,因此使用nametowidget()是更好的方法,而不是手动处理名称以获得所需的键以用于对子字典的引用。