Я хочу создать простой графический интерфейс для постоянных данных, поступающих через последовательный порт.Я решил использовать tkinter.Значение reading
обновлено и должно быть указано в метке.Я создал отдельные классы для контейнера и других страниц.Я определил контейнер следующим образом:
class Gui(Tk):
def __init__(self, *args, **kwargs):
Tk.__init__(self, *args, **kwargs)
container = Frame(self)
container.pack(side="top", fill = "both", expand = TRUE)
container.grid_rowconfigure(0, weight = 1)
self.frames={}
for F in (StartPage, PageOne):
frame = F(container, self)
self.frames[F] = frame
frame.grid(row = 0, column = 0, sticky = "nsew")
frame.UpdateMe()
self.show_frame(StartPage)
def show_frame(self, cont):
frame = self.frames[cont]
frame.tkraise()
И страница с меткой:
class PageOne(Frame):
def __init__(self, parent, controller):
Frame.__init__(self,parent)
global reading
self.label1text = StringVar()
self.label1 = Label(self, textvariable = label1text)
self.label1.pack()
button1 = Button (self, text = "Show Start Page", command = lambda: controller.show_frame(StartPage))
button1.pack()
self.label1text.set(reading)
def UpdateMe(self):
global reading
self.lable1text.set(reading)
Теперь, чтобы инициализировать графический интерфейс:
root = Gui()
root.mainloop()
Однако,поскольку mainloop()
блокирует, любой последующий аргумент не будет выполнен;Я мог бы обойти это с update
и update_idletasks
.Тем не менее, я до сих пор не знаю, как я мог бы вызвать функцию UpdateMe()
внутри PageOne()
, когда создавал только экземпляр Gui()
.Есть ли способ для меня решить это или исправить мое понимание классов и объектного программирования?