我想创建一个简单的图形用户界面,用于通过串口传输的常量数据。我决定用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)
现在,要初始化GUI:
root = Gui()
root.mainloop()
但是,因为mainloop()
是阻塞的,所以后面的任何参数都不会被执行;我可以用update
和update_idletasks
来绕过它。但是,当我只创建了Gui()
的实例化时,我仍然不知道如何调用UpdateMe()
内的函数PageOne()
。有没有办法解决这个问题或者修正我对类和对象编程的理解?你知道吗
因为在没有初始化
Tk()
的情况下无法创建StringVar
(对于您的情况,它是Gui()
),所以您需要在Gui()
内创建reading
变量,并且PageOne.label1
使用它作为它的textvariable
。以下是基于您的代码的示例:注意,我创建了一个函数
update_reading()
,用after()
函数来模拟reading
变量的周期性更新。你知道吗相关问题 更多 >
编程相关推荐