Python GUI和类结构

时间:2014-04-14 06:39:24

标签: python class user-interface

拥有" root"是否是一个好的结构?或者" app"和一个带有Frame而不是单独的类的mainloop然后如果" if __name .."打电话?

示例:

class App:

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

2 个答案:

答案 0 :(得分:1)

将您的应用代码放在继承自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中。

答案 1 :(得分:0)

使用class时,可以使用create class对象多次使用方法。

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()