當你想寫大一點的程序的時候,將你的代碼封裝到一個或者多個類里會是一個不錯的辦法。下面'hello world'這個例子來自Matt Conway的Tkinter Life Preserver.
?
- from?Tkinter?import?*??
- ??
- class?App:??
- ??
- ????def?__init__(self,?master):??
- ??
- ????????frame?=?Frame(master)??
- ????????frame.pack()??
- ??
- ????????self.button?=?Button(??
- ????????????frame,?text="QUIT",?fg="red",?command=frame.quit??
- ????????????)??
- ????????self.button.pack(side=LEFT)??
- ??
- ????????self.hi_there?=?Button(frame,?text="Hello",?command=self.say_hi)??
- ????????self.hi_there.pack(side=LEFT)??
- ??
- ????def?say_hi(self):??
- ????????print?"hi?there,?everyone!"??
- ??
- root?=?Tk()??
- ??
- app?=?App(root)??
- ??
- root.mainloop()??
- root.destroy()?#?optional;?see?description?below??
當你運行程序時,會出現下面的窗口。
?
如果你點擊右邊的按鍵, “hi there, everyone!”?將會輸出在控制臺。 如果你點擊左邊的按鍵,程序就會終止。
程序講解:
這個簡單的程序是用類寫的. 構造器 (__init__?方法) 接受一個主窗口作為參數(root), 然后創建了幾個子控件。 構造器首先創建了一個?Frame控件。frame是一個簡單的容器,在這個例子中,他僅僅用來防止其它2個控件。
class App:def __init__(self, master):frame = Frame(master)frame.pack()
我們通過Frame類創建一個實例,并把它保存為實例的局部變量?frame. 之后,我們對其使用pack方法使其可見。
然后我們創建2個Button,作為frame的子控件。
self.button = Button(frame, text="QUIT", fg="red", command=frame.quit) self.button.pack(side=LEFT)self.hi_there = Button(frame, text="Hello", command=self.say_hi) self.hi_there.pack(side=LEFT)
這一次我們通過關鍵字參數的形式給構造函數船體幾個參數。 第一個button的text屬性為“QUIT”,并設置前景色為紅色。第一個button的text屬性為“Hello”.。這兩個Button的command選型也都設置了參數。這個選項用來設置一個函數或者綁定的方法,當button被點擊時,相應的函數或者方法就會調用。?
這兩個button實例作為實例屬性存儲。他們都使用pack方法,但這次還使用了?side=LEFT參數。這意味著他們將會被盡可能的放置在frame的左邊; 第一個button會被放在frame的左邊,第二個button會緊貼著第一個button放置。一般來說,控件被放置的位置都是相對于他們的主控件而言的。如果沒有指定side選項,默認為side=TOP.
?“hello”?button 的回調函數如下所示。當用鼠標點擊button時,它至是簡單的想控制臺輸出一行信息:
def say_hi(self):print "hi there, everyone!"
最后,我們寫一些代碼創建?Tk?root 窗口, 并把它作為參數傳遞給App類,它會成為其它控件的父窗口。
root = Tk()app = App(root)root.mainloop() root.destroy()
調用?mainloop?使Tk進入事件循環, 當點擊QUIT或者關閉窗口時程序才會終止。
destroy只有你在特殊的環境下運行這個例子才需要;當時間循環被終止的時候,它會明確的釋放這個窗口。 一些開發環境只有調用這個方法才會終止Python進程。