#tkinter
#python #tkinter #ttk
Вопрос:
У меня есть виджет Ttk Notebook, содержащий 8 фреймов — итак, 8 вкладок. Каждый фрейм содержит текстовый виджет. У меня есть кнопка вне виджета Notebook, и я хочу вставить текст в текстовый виджет current tabs при нажатии этой кнопки.
Похоже, для этого потребуется определить, какой виджет в записной книжке выбран в данный момент, но, похоже, я не могу найти, как это сделать. Как мне найти текущую выбранную вкладку?
В качестве альтернативы, как я могу реализовать то, что я хочу?
Если это поможет, вот код для моей записной книжки:
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')
Ответ №1:
Вы можете получить выбранную вкладку с помощью 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
Комментарии:
1. Аааа, именно то, что я хотел! У меня возникли проблемы с просмотром документации, поэтому я, должно быть, пропустил это. Но да, это идеально.
Ответ №2:
Вы можете получить текущую выбранную вкладку, используя "current"
ключевое слово:
noteBook.index("current")
Проверьте этот веб-сайт:
https://docs.python.org/2/library/ttk.html#tab-identifiers
24.2.5.3. Идентификаторы вкладок
Ответ №3:
Есть два простых способа узнать, какая вкладка выбрана:
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 (в форме «name») текущего выбора.
.index(tabId)
Преобразует tabId в числовой индекс. Он также может принимать строку «end», которая вернет количество вкладок. Итак, nb.index(tkinter.END)
это похоже на len()
метод для виджета notebook.
Когда вкладок нет, .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:
Я совсем не эксперт, но надеюсь, что смогу помочь с некоторыми «свежими глазами». Я полагаю, это может быть что-то связанное
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 🙂
Комментарии:
1. Аааа, да, это очень похоже на то, что я в итоге использовал. Не совсем то, что я ищу, но он делает то, что мне нужно.
Ответ №5:
Получение вкладки с тегами в 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