16

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

这似乎需要确定当前选择了笔记本中的哪个小部件,但我似乎找不到如何做到这一点。我如何找到当前选择的选项卡?

或者,我怎样才能实现我想要的?

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

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')
4

5 回答 5

35

select您可以通过方法检索选定的选项卡。但是,此方法返回的 tab_id 并没有多大用处。index将其转换为所选选项卡的编号。

>>> nb.select()
'.4299842480.4300630784'
>>> nb.index(nb.select())
2

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

>>> nb.tab(nb.select(), "text")
'mytab2'

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

于 2012-12-23T16:43:30.217 回答
10

"current"您可以使用关键字获取当前选择的选项卡:

noteBook.index("current")

检查这个网站: https: //docs.python.org/2/library/ttk.html#tab-identifiers 24.2.5.3。选项卡标识符

于 2017-01-04T06:03:37.417 回答
6

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

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(以“名称”形式)。

.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 名称映射到实际的小部件。它是任何实际小部件都可以调用的方法。

于 2017-12-27T15:05:17.637 回答
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()

希望它有效或让您朝着正确的方向前进。

请随时编辑,因为我在这里相当新 amd 使用 python :-)

于 2012-12-23T15:12:24.997 回答
1

在 tk.Notebook 中获取标记选项卡很容易,您所要做的就是使用 notebook 对象并定位当前选项卡的索引。这可以按如下方式完成

 # 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
于 2020-09-28T16:55:00.220 回答