Поиск выбранной вкладки TTK Notebook

У меня есть виджет ноутбука Ttk, содержащий 8 кадров-так, 8 вкладок. Каждый кадр содержит текстовый виджет. У меня есть кнопка вне виджета 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')

4 ответов


вы можете получить выбранную вкладку через 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


Вы можете получить выбранную вкладку с помощью "current" ключевые слова:

noteBook.index("current")

проверьте этот веб-сайт: https://docs.python.org/2/library/ttk.html#tab-identifiers 24.2.5.3. Идентификаторы Вкладок


Я не эксперт вообще, но надеюсь, что смогу помочь с некоторыми "свежими глазами". Я думаю, это может быть что-то связанное

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: -)


есть два простых способа, чтобы увидеть, какая вкладка выбрана:

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 он возвращает табид (в форме" имя") текущего выделения.

на .index(tabId) преобразует табид в числовой индекс. Он также может взять строку "end", которая вернет количество вкладок. Итак,nb.index(tkinter.END) как len() метод для a виджет для ноутбука.

когда нет вкладок,.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) метод отображает a Название Tkinter в виджет. Это метод, вызываемый любым фактическим виджетом.