Не могу передать значения Combobox и Entry в функцию. Python tkinter GUI
В Python, тем более в tkinter я новичок, пишу калькулятор калорий в качестве семестровой работы. Возникла проблема передачи значений dishes_box.get() и grams.get() из дочернего окна, которое вызвано функцией, в функцию add_a_dish(), которая является командой для кнопки. Пробовал использовать и lambda выражения и функцию partial, но результата не добился.
def choose_dish(name, massa):
name = dishes_box.get()
base_of_dishes = open('dishes.txt', encoding= 'UTF-8')
for line in base_of_dishes:
line = line.split(',')
if line[0] == str(name):
bilok_now = float(line[1]) * (float(massa)/100)
jir_now = float(line[2]) * (float(massa)/100)
vyg_now = float(line[3]) * (float(massa)/100)
calories_now = float(line[4]) * (float(massa)/100)
break
base_of_dishes.close()
def add_a_dish():
a = []
base_of_dishes = open('dishes.txt', encoding= 'UTF-8')
for line in base_of_dishes:
line = line.split(',')
a.append(str(line[0]))
base_of_dishes.close()
grams = tk.IntVar()
window = tk.Toplevel(master=calculator_window)
window.geometry('300x200')
window.title('Додати страву')
tk.Label(window ,text='Оберіть страву з списку введіть її приблизну вагу:', font = 'Arial 8').pack()
dishes_box = tk.ttk.Combobox(window, values=a)
dishes_box.pack()
x = dishes_box.get()
tk.Label(window, text='Вага в грамах:').pack()
tk.Entry(window, textvariable=grams).pack()
tk.Button(window, text='ОК', command = partial(choose_dish, x, grams.get())).pack(pady=10)
Заранее благодарен)
Ответы (1 шт):
Автор решения: insolor
→ Ссылка
Вместо partial нужно использовать лямбду, т.к. у вас методы .get от полей вызываются сразу при создании кнопки, а нужно чтобы вызывались только после нажатия на кнопку:
tk.Button(window, text='ОК', command=lambda: choose_dish(dishes_box.get(), grams.get())).pack(pady=10)
Ну и в choose_dish убрать строку name = dishes_box.get(), т.к. название уже передается через параметр name.