Python Tkinter學習(1)——第一個Tkinter程序

注:本文可轉載,轉載請註明出處:http://www.cnblogs.com/collectionne/p/6885066.html。格式修改未完成。html

 

Tkinter資料

 

Python Wiki, TkInterpython

effbot.org, An Introduction to Tkinterweb

New Mexico Tech Computer Center, Tkinter 8.5 Reference, a GUI for Pythonapp

 

還有更多資料,詳情請訪問第一個Python Wiki連接。函數

 

Tkinter介紹

 

Python支持多個圖形庫,例如Qt、wxWidgets,等等。可是Python的標準GUI庫是Tkinter。Tkinter是Tk Interface的縮寫。Python提供了tkinter包,裏面含有Tkinter接口。oop

 

開始寫程序

 

要使用Tkinter,首先須要導入Python提供的tkinter模塊:佈局

 

import tkinter as tk

 

這個語句導入tkinter模塊,但爲方便,爲它定義了一個別名tkui

 

GUI系統中,廣泛有一個控件(widget)的概念。控件就是指按鈕、滾動條、文本框這些東西。特殊地,窗口也是一個控件,窗口能夠容納其它控件。在Tkinter中,用Frame類表示窗口。咱們的程序能夠直接建立一個Frame對象再向裏面添加控件,但習慣上會從Frame類派生出Application類(也能夠叫其它名字):spa

 

class Application(tk.Frame):

 

接下來咱們須要爲Application編寫構造函數__init__htm

 

    def __init__(self, master=None):
        tk.Frame.__init__(self, master)
        self.grid()
        self.createWidgets()

 

首先,__init__有兩個參數。第一個是self,即Application對象自己。第二個是master,在Tkinter中,一個控件可能屬於另外一個控件,這時另外一個控件就是這個控件的master。默認一個窗口沒有master,所以master有None的默認值。

 

第二行tk.Frame.__init__(self, master)調用Application的父類Frame__init__函數初始化Application類的Frame類部分。__init__函數的定義以下:

 

__init__(self, master=None, cnf={}, **kw)

 

初始化Frame對象。masterFrame的父控件,默認爲Nonecnf尚不清楚;kw爲命名關鍵字參數,可接受的參數將在後面提到。

 

由於這裏不是直接用對象調用函數,又不是通常意義的建立對象(例如後面的quitButton),而是初始化自身的一部分,所以須要傳入self。咱們還傳入了Application.__init__master參數,做爲Frame.__init__的master

 

第三行self.grid(),顯示窗口並使用grid佈局。grid方法是從Frame繼承來的。Tkinter中有一個概念叫佈局(layout),就是控件的排列方式。除了grid(),還有pack等佈局。

 

第四行self.createWidgets(),調用後面定義的createWidgets方法。

 

而後是createWidgets方法的定義:

 

    def createWidgets(self):
        self.quitButton = tk.Button(self, text='Quit', command=self.quit)
        self.quitButton.grid()

 

createWidgets函數的定義就不講了,只有一個self參數。

 

第二行self.quitButton = tk.Button(self, text='Quit', command.self.quit),爲Application類建立了一個quitButton屬性,類型爲Button。Button的構造函數以下:

 

__init__(self, master=None, cnf={}, **kw)

 

初始化Button對象。master爲Button的父控件,默認爲None;cnf尚不清楚;kw爲命名關鍵字參數,可接受的參數有text(標準)、command(按鈕特有),其它參數將在之後提到。

 

這裏和前面不一樣,不是初始化自身,而是建立了quitButton屬性,所以不須要寫Button.__init__(...),而是直接寫Button(...),也不須要像前面同樣傳入self。那爲何還要傳入self呢?這個self並非對應於Button.__init__中的self參數,而是master參數,表示按鈕的父控件是窗口!

 

咱們還傳入了text和command兩個命名關鍵字參數。text是顯示在按鈕上的文字,這裏爲'Quit';command爲點擊按鈕時調用的函數,這裏爲Frame類的quit函數,quit函數會使程序退出。

 

第三行,self.quitButton.grid(),和前面同樣,顯示按鈕並使用grid()佈局。

 

而後就輪到建立Application對象了:

 

app = Application()
app.master.title = 'First Tkinter'
app.mainloop()

 

第一行app = Application(),建立一個名爲app的Application對象。

 

第二行app.master.title = 'First Tkinter',將窗口的標題設置爲'First Tkinter'。固然可能會由於窗口過小,看不見標題。

 

第三行app.mainloop(),進入主循環。

 

如今運行你的程序,看看是否是點擊Quit按鈕就會退出了。固然你也能夠經過點擊窗口上方的關閉按鈕退出。

 

主循環

 

GUI程序中有一個主循環(main loop)的概念。用僞代碼的形式表現出來,是相似於這樣的:

 

while noQuitCommands:
    checkInput()
    updateWidgets()
    ...

 

主循環會一直執行,直到出現退出請求。在主循環中,會檢查用戶輸入(例如鼠標、鍵盤等),並更新控件。這裏,若是發現鼠標點擊了按鈕,就會執行按鈕的command,而command是Frame.quit,執行command至關於執行了Frame.quit,循環就結束了,控件所有銷燬,程序結束。

 

最終代碼

 

下面是本課的最終代碼,配上完整註釋:

 

# 導入tkinter包,爲其定義別名tk
import tkinter as tk

# 定義Application類表示應用/窗口,繼承Frame類
class Application(tk.Frame):
	# Application構造函數,master爲窗口的父控件
	def __init__(self, master=None):
		# 初始化Application的Frame部分
		tk.Frame.__init__(self, master)
		# 顯示窗口,並使用grid佈局
		self.grid()
		# 建立控件
		self.createWidgets()

	# 建立控件
	def createWidgets(self):
		# 建立一個文字爲'Quit',點擊會退出的按鈕
		self.quitButton = tk.Button(self, text='Quit', command=self.quit)
		# 顯示按鈕,並使用grid佈局
		self.quitButton.grid()

# 建立一個Application對象app
app = Application()
# 設置窗口標題爲'First Tkinter'
app.master.title = 'First Tkinter'
# 主循環開始
app.mainloop()
相關文章
相關標籤/搜索