Как вставить текст в находящийся в текущей вкладке виджет Text?
Недавно узнал о виджете Notebook . И захотел сделать динамическое добавление вкладок .
from tkinter import *
from tkinter import ttk
root = Tk()
n = ttk.Notebook(root)
n.pack(fill = X)
tab = 1
def new_tab():
global tab
text = Text(root)
text.pack()
n.add(text, text = ("tab "+str(tab)))
tab += 1
def check():
'''код для вставки текста в виджет Text'''
...
plus = Button(root,text = '+', command=new_tab)
plus.pack(side = LEFT)
check_button = Button(root, text = 'check', command = check)
check_button.pack(side = LEFT)
root.mainloop()
Добавление вкладок я сделал, но при попытке вставить какой либо текст с помощью insert в функции check, python выдаёт ошибку. Но проблема не совсем в ошибке. Я хотел вставить текст в текстовый виджет находящийся в текущей вкладке.
Ответы (1 шт):
Автор решения: insolor
→ Ссылка
- Индекс выбранной вкладки можно получить так:
n.index(n.select()) - Добавляете каждое новое созданное текстовое поле в список
- В функции
checkопределяете индекс выбранной вкладки (см. п. 1), по этому индексу из списка текстовых полей получаете текстовое поле текущей вкладки, в это текстовое поле добавляете текст
Пример:
text_widgets = []
def new_tab():
text = Text(root)
text.pack()
text_widgets.append(text)
n.add(text, text = f"tab {len(text_widgets)}")
def check():
current_tab_index = n.index(n.select())
text_widgets[current_tab_index].insert(END, "Some text\n")
Другой вариант: n.select() возвращает текстовый id виджета в текущей вкладке (в вашем случае это будет id текстового поля), получить сам виджет можно с помощью метода root.nametowidget():
tab = 1
def new_tab():
global tab
text = Text(root)
text.pack()
n.add(text, text = ("tab "+str(tab)))
tab += 1
def check():
widget_id = n.select()
root.nametowidget(widget_id).insert(END, "Some text\n")