它是一個好的結構有一個框架的「根」或「應用程序」和主循環,而不是單獨的,然後如果「if __name ..」來調用?Python的GUI和類結構
例如:當您使用class
,你可以使用一個創建類對象使用多個時間有方法
class App:
def __init__(self):
self.root = Tkinter.Tk()
self.root.title("Color Send to Arduino")
它是一個好的結構有一個框架的「根」或「應用程序」和主循環,而不是單獨的,然後如果「if __name ..」來調用?Python的GUI和類結構
例如:當您使用class
,你可以使用一個創建類對象使用多個時間有方法
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我使用。
。
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()
很好的例子!所以它會使代碼更加可重用,以便將類的'root = tk.Tk()'和'root.mainloop()'保留在app.py中?或者我應該包含它,因爲在other_app.py中,你可以寫'myapp = App()'?對不起,我是新的GUI設計和麪向對象... – mECH
個人我會離開他們都出類,並把他們在if語句(如我已經添加到代碼),以便他們只執行在實際上正在運行的文件。考慮這個問題的一個好方法是你可能想要在GUI中有多個「應用程序」,但你只想運行一次'root.mainloop'。通過上述設計,您可以添加或刪除GUI中的應用程序,而且不必大驚小怪。 – ebarr