我有一个包含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')
答案 0 :(得分:16)
您可以通过select
方法检索所选标签。但是,此方法返回一个tab_id,它不是很有用。 index
将其转换为所选标签的编号。
>>> nb.select()
'.4299842480.4300630784'
>>> nb.index(nb.select())
2
请注意,您还可以使用tab
>>> nb.tab(nb.select(), "text")
'mytab2'
您可以查看Notebook参考文档:http://docs.python.org/3/library/tkinter.ttk.html#notebook
答案 1 :(得分:5)
您可以使用"current"
关键字获取当前选中的标签:
noteBook.index("current")
查看本网站: https://docs.python.org/2/library/ttk.html#tab-identifiers 24.2.5.3。标签标识符
答案 2 :(得分:1)
我根本不是专家,但希望我可以帮助一些“新鲜的眼睛”。 我想这可能是涉及
的事情def buttonclick():
somevariablename = focus_get()
#Print your text into the somevariable notebook could be
#something like(not sure about the syntax):
focusednotebook = somevariablename
focusednotebook.insert('1.0', 'your text here')
yourbutton = Button(parent, text = "button name", command = buttonclick)
yourbutton.pack()
希望它有效或让你朝着正确的方向前进。
请随意编辑,因为我在这里相当新,并且使用python: - )
答案 3 :(得分:1)
有两种简单的方法可以查看选择了哪个标签:
nb.select() # returns the Tab NAME (string) of the current selection
和
nb.index('current') # returns the Tab INDEX (number) of the current selection
.select()
方法也可用于通过nb.select(tabId)
选择当前有效的标签。如果没有arg,它将返回当前选择的tabId(在" name"表单中)。
.index(tabId)
将tabId转换为数字索引。它也可以采用字符串" end"这将返回选项卡的数量。因此,nb.index(tkinter.END)
就像是笔记本小部件的len()
方法。
如果没有制表符,.select()
会返回一个空字符串,但.index('current')
会抛出异常。所以,如果你想要索引,我会说
if nb.select():
idx = nb.index('current')
是最好的方式。
在您的特定情况下,您可能希望获取当前的笔记本选项卡名称,然后通过nametowidget()
方法将该名称转换为实际的子文本小部件,以进行操作。所以......
tabName = notebook.select()
if tabName:
textWidget = notebook.nametowidget(tabName) # here, 'notebook' could be any widget
textWidget.insert(pos, text, tags)
nametowidget(name)
方法将Tkinter名称映射到实际的小部件。它是一个可由任何实际小部件调用的方法。
答案 4 :(得分:1)
在tk中获取分页的标签。笔记本很容易,您要做的就是使用笔记本对象并定位当前标签的索引。可以这样完成
# creating a notebook object
notebook = ttk.Notebook(root, height=height, width=width, padding=20)
# Adding tabs
notebook.add(bin_tab, text="Binary Conversion")
notebook.add(oct_tab, text="Octal Conversion")
notebook.add(hex_tab, text="Hexadecimal Conversion")
print(notebook.index("current")) # returns 0, 1, 2depending on how many tabs you have in my case i have 3 which means index from 0 to 2