我有ttk.Notebook类的笔记本小部件。在这个笔记本中,我添加了很多标签:
notebook.add(child=my_object, text='my tab')
如何获取标签对象而不是标签名称?
所以,有儿童词典。好的,这会带来下一个问题。
我真正想做的是抓住Notebook中活动标签的对象。所以我有这个:
notebook.children[notebook.select().split('.')[2]])
但它看起来很难看。不幸的是,select()返回的窗口小部件名称与子窗口[]中窗口小部件名称的格式不完全相同。有没有任何方法可以将一种格式可靠地翻译成另一种格式,或者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()
答案 0 :(得分:1)
ttk.Notebook将Tab-Objects存储在它的子属性中,这是一个python字典,如:
{my_tab._name: tab_object} e.g. {'4465111168': <Viewer.Tab object .4435079856.4465020320.4465111168>}
您可以通过以下方式访问Tab对象:
my_notebook.children[my_tab._name]
其中my_notebook是ttk.Notebook对象的实例,my_tab是Tab对象。标签属性_name
是在my_notebook.children
中存储为关键字的值。
因此,访问选项卡对象的最简单方法是将my_tab._name
值单独存储在列表或变量中。
存储了所有名称后,您可以访问上面的子项目。
有关详情,请参阅https://docs.python.org/3.1/library/tkinter.ttk.html。
答案 1 :(得分:0)
删除了我以前的帖子,因为它基本上是bs。
要获取实际的widget对象,请使用以下代码:
name = mywidget.winfo_name() # this returns this ominous string
# of numbers and dots
object_from_name = mywidget._nametowidget(name) # this returns your
# actual widget
如果您打印object_from_name,您可能会获得该名称。但我想,这就是tkinter widget对象的表示方式。 你应该可以做到
object_from_name.config(text="stuff", do_further_stuff_here="")
答案 2 :(得分:0)
notebook.tabs()
调用返回&#34;标签名称列表&#34;对应于子窗口小部件对象。对someWidget.nametowidget(tab_name)
的调用将解析为与该选项卡关联的子窗口小部件。
换句话说,Notebook .tabs()
方法会返回Notebook儿童名称的列表。
答案 3 :(得分:-1)
这就是我的窍门:
for name in notebook.tabs():
tab_widget = notebook.nametowidget(name)