Как на Tkinter python поменять значение виджета Text через Combobox
Допустим у меня есть один виджет text и два виджета Combobox, как мне сделать так, чтобы виджет text постоянно менялся в соответствии с выбранным вариантом из обоих Combobox, например :
from tkinter import *
from tkinter.ttk import Combobox
root = Tk()
Combo1 = Combobox(root)
Combo1['values'] = (1, 2)
Combo1.pack()
Combo2 = Combobox(root)
Combo2['values'] = [3, 4]
Combo2.pack()
text = Text(root)# Этот виджет должен меняться в соответствии
text.pack()# с Combo1 и Combo 2
root.mainloop()
Нужно чтобы в Text был и вариант из Combo1 и из Combo2 И цикл пробовал, но при использовании цикла код просто уходил в бесконечнй цикл
Ответы (1 шт):
Автор решения: Daniil Loban
→ Ссылка
Для реализации подобной задачи нужно забиндить (bind) комобобоксы на обработчики обновления при событии ComboboxSelected, ну и разумеется понадобится где-то хранить данные в данном случае это словарь data, для вывода можно использовать одну и ту же функцию так как элемент вывода один и тот же:
from tkinter import *
from tkinter.ttk import Combobox
root = Tk()
Combo1 = Combobox(root)
Combo1['values'] = (1, 2)
Combo1.pack()
Combo2 = Combobox(root)
Combo2['values'] = [3, 4]
Combo2.pack()
text = Text(root)# Этот виджет должен меняться в соответствии
text.pack()# с Combo1 и Combo 2
data = {
"value1" :"",
"value2" :""
}
def setText():
global data
text.delete("0.0", "end")
text.insert(INSERT,
f'''значение1: {data['value1']}
значение2: {data['value2']}''')
def update1(event):
global data
data["value1"] = event.widget.get()
setText()
def update2(event):
global data
data["value2"] = event.widget.get()
setText()
Combo1.bind("<<ComboboxSelected>>", update1)
Combo2.bind("<<ComboboxSelected>>", update2)
root.mainloop()
