Python GUI和类结构



将"root"或"app"和mainloop放在一个带有Frame的类中,而不是单独的,然后如果要调用"if__name..",这是一个好的结构吗?

示例:

class App:
    def __init__(self):
        self.root = Tkinter.Tk()
        self.root.title("Color Send to Arduino")

将应用程序代码放在从Frame继承的类中的一个很好的理由是它使代码更易于重用。您可以将它插入到任何Tkinter GUI根目录中,而无需太多麻烦。

例如app.py

import Tkinter as tk
class App(tk.Frame):
    def __init__(self,parent):
        tk.Frame.__init__(parent)
        self.parent = parent
    def initialise(self):
        pass

以及在other_app.py 中

from app import App
import Tkinter as tk
if __name__ == "__main__":
    root = tk.Tk()
    myapp = App(root)
    myapp.pack()
    root.mainloop()

编辑:按照我下面的评论,一个真正的(尽管非常简单)可重复使用的应用程序就是一个时钟。

import Tkinter as tk
import getpass
import time
class WelcomeClock(tk.Frame):
    def __init__(self,parent):
        tk.Frame.__init__(self,parent)
        self.parent = parent
        self.timevar = tk.StringVar()
        self.__set_time()
        self.initialize()
    def initialize(self):
        message = "Welcome %s!nThe time is currently"%(getpass.getuser().capitalize())
        self.welcome = tk.Label(self,text=message)
        self.welcome.pack(anchor=tk.N)
        self.clock = tk.Label(self,textvar=self.timevar)
        self.clock.pack()
    def __set_time(self):
        self.timevar.set(time.strftime("%Y-%m-%d %H:%M:%S"))
        self.after(499,self.__set_time)
if __name__ == "__main__":
    root = tk.Tk()
    clock = WelcomeClock(root)
    clock.pack()
    root.mainloop()

由于WelcomeClock类继承自tk.Frame,我可以很容易地将其导入并打包到我使用的任何其他Tkinter GUI中。

使用class时,可以使用创建类对象使用多个time-thre方法。

import Tkinter
class simpleapp_tk(Tkinter.Tk):
    def __init__(self,parent):
        Tkinter.Tk.__init__(self,parent)
        self.parent = parent
        self.initialize()
    def initialize(self):
        pass 
if __name__ == "__main__":
    app = simpleapp_tk(None)
    app.title('my application')
    app.mainloop()

相关内容

  • 没有找到相关文章

最新更新