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