Я создаю приложение с графическим интерфейсом в Tkinter и структурировал свою программу, используя подход ООП. Я создал экземпляр tk.Tk () и класс, который наследуется от tk.Frame, принимает экземпляр Tk () в качестве параметра, и я делаю создание графического интерфейса пользователя и его логику внутри класса.
Внутри класса я создал холст, на котором разместил несколько виджетов. Один из моих виджетов - это запись, а другой - кнопка. Команда кнопки должна быть функцией, которая принимает в качестве входного параметра значение current для элемента entry (используя Entry.get ()) и что-то делает с ним, например, печатает его на экране.
Это код, в котором я воссоздал проблему:
import tkinter as tk
class myClass(tk.Frame):
def __init__(self, master):
super(myClass, self).__init__(master)
self.pack()
self.Widgets()
def getVal(self, val):
print("The value is: ", val)
def Widgets(self):
canvas = tk.Canvas(self, width=500, height=500, bg='green')
canvas.grid(row=0, column=0)
entry = tk.Entry()
button = tk.Button(text='pressme')
button['command'] = lambda arg = entry.get() : self.getVal(arg)
window = canvas.create_window(100, 100, window=entry)
window2 = canvas.create_window(100, 200, window=button)
root = tk.Tk()
root.title("MyGUI")
classinstance = myClass(root)
root.mainloop()
Функция 'getVal' из класса должна печатать независимо от значения аргумента, где должно быть значение current из записи GUI. Проблема заключается в том, что моя программа видит только начальное значение из этой записи (которая в данном случае является пустой строкой) и не изменяет ее впоследствии, когда я обновляю графический интерфейс во время выполнения.
Теперь я предполагаю, что это потому, что в программе main .py classinstance создается с некоторыми значениями по умолчанию до того, как приложение входит в функцию mainloop () tkinter, и однажды в этой функции зацикливания я не могу вернуться внутрь Класс и изменить значения. Пожалуйста, помогите мне исправить эту проблему и объясните мне, как я мог сделать свое заявление, чтобы команда кнопки получила обновленную версию значения записи, а не исходную.
Спасибо за чтение моего поста!