Вызов функции из дочернего окна. Как вернуть значение в дочернее окно?
Подскажите, пожалуйста, как вернуть значение list1 в поле res_text дочернего окна, а не в консоль, и при вводе новых значений очищать res_text.
И можно ли как-то более проще добавить фон для главного окна?
import tkinter as tk
from PIL import Image, ImageTk
def program(num1, num2):
num1_g = num1.get()
num2_g = num2.get()
list1 = []
for i in range (1, 10):
num = int(num1_g) * int(num2_g) * i
list1.append(num)
print(list1)
def window2():
w = tk.Toplevel()
w.title("Второе окно")
w.geometry("500x300")
w.resizable(False, False)
w.num1 = tk.StringVar()
w.num2 = tk.StringVar()
label_1 = tk.Label(w, text='Первое число').place(x=10, y=0)
edit_1 = tk.Entry(w, textvariable=w.num1, width=5).place(x=10, y=35)
label_2 = tk.Label(w, text='Второе число').place(x=10, y=70)
edit_2 = tk.Entry(w, textvariable=w.num2, width=5).place(x=10, y=105)
btn = tk.Button(w, text="Пуск", command=lambda: program(w.num1, w.num2)).place(x=10, y=140,)
res_text = tk.Text(w, width=10, height=5).place(x=150, y=0)
w.grab_set()
w.focus_set()
root = tk.Tk()
root.title("Пример")
root.geometry("400x200")
root.resizable(False, False)
#l_b = tk.Label(root)
#img_back = Image.open("*картинка*")
#l_b.img_back = ImageTk.PhotoImage(img_back)
#l_b['image'] = l_b.img_back
#l_b.pack()
btn_open = tk.Button(root, text="Открыть окно 2", command=lambda: window2(),).place(x=127, y=0)
root.mainloop()
Ответы (1 шт):
Автор решения: insolor
→ Ссылка
Такой вариант: не выводить результат сразу из program, а возвращать список через return, и возвращенный список уже выводить в текстовое поле.
def program(num1, num2):
num1_g = num1.get()
num2_g = num2.get()
list1 = []
for i in range (1, 10):
num = int(num1_g) * int(num2_g) * i
list1.append(num)
return list1
def window2():
...
def show_result(data):
res_text.delete(1.0, tk.END) # Очистка текстового поля
res_text.insert(1.0, str(data)) # Вывод данных
btn = tk.Button(w, text="Пуск", command=lambda: show_result(program(w.num1, w.num2)))
btn.place(x=10, y=140)
res_text = tk.Text(w, width=10, height=5)
res_text.place(x=150, y=0)
...
Обратите внимание, что если вам нужен доступ к виджетам через переменную, то place, grid или pack нужно делать отдельно от присваивания в переменную, иначе в переменные будет записан результат вызова этих методов, а они ничего не возвращают, поэтому в переменную будет записано None.