Поиск текущей выбранной вкладки Ttk Notebook

У меня есть виджет Ttk Notebook, содержащий 8 фреймов, то есть 8 вкладок. Каждый фрейм содержит текстовый виджет. У меня есть кнопка вне виджета «Блокнот», и я хочу вставить текст в текущие вкладки «Текстовый виджет» при нажатии этой кнопки.

Казалось бы, для этого нужно выяснить, какой виджет в блокноте выбран в данный момент, но я не могу найти, как это сделать. Как мне найти текущую выбранную вкладку?

В качестве альтернативы, как я могу реализовать то, что хочу?

Если это поможет, вот код для моей записной книжки:

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

person Matthew    schedule 22.12.2012    source источник


Ответы (5)


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

person FabienAndre    schedule 23.12.2012
comment
Аааа, именно то, что я хотел! У меня были проблемы с просмотром документации, поэтому я, должно быть, пропустил это. Но да, это идеально. - person Matthew; 24.12.2012

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

noteBook.index("current")

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

person bcatets    schedule 04.01.2017

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

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

.index(tabId) преобразует tabId в числовой индекс. Он также может принимать строку «конец», которая вернет количество вкладок. Таким образом, 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 с фактическим виджетом. Это метод, вызываемый любым фактическим виджетом.

person Gary02127    schedule 27.12.2017

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

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

person Evilunclebill    schedule 23.12.2012
comment
Ах, да, это очень похоже на то, что я в итоге использовал. Не совсем то, что я ищу, но он делает то, что мне нужно. - person Matthew; 24.12.2012

Получить помеченную вкладку в tk.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
person Crispen Gari    schedule 28.09.2020