寫一個簡單的界面很容易,即便是什麼都不瞭解的狀況下,這個文本轉載了最簡單的界面編寫,下個文本介紹了TK的簡單但具體的應用html
在python中建立一個窗口,而後顯示出來。python
就3行就可以把主窗口顯示出來了。root是一個變量名稱,其表明了這個主窗口。之後建立控件的時候指定控件建立在什麼窗口之中,就要用這個root來表示了。而Tk()是一個Tkinter庫之中的函數(實際上是類的構造函數,構造了一個對象)。而mainloop則是主窗口的成員函數,也就是表示讓這個root工做起來,開始接收鼠標的和鍵盤的操做。你如今就可以經過鼠標縮放以及關閉這個窗口了。注意到窗口的標題是tk,咱們能夠進行一些修改web
而後窗口的標題就變成了bitunion了。下面要做的是把這個窗口的內容填充一下,讓其有一些東西。先加入一個標籤,所謂標籤就是一行字。windows
咱們很驚訝的發現窗口變小了,可是其中多了一行字。變小了是由於窗口中已經放了東西了,python的Tkinter很是智能,可以根據內容自動縮放,而不用和傳統的windows程序同樣,手工的指定絕對座標了。對於label,它仍是一個變量而已。不過這個變量表明瞭一個標籤,也就是那一行字。而這個label的建立是用Label,而Label的參數是root代表了這個控件是root主窗口的成員控件,或者說是子窗口。label['text']表示設置這個標籤的text屬性爲'be on your own',也就是文字內容了。label.pack和root.mainloop同樣費解,可是內涵同樣深入。你如今能夠簡單理解爲把label顯示出來的功能,由於你把pack去掉,那你就看不到東西了。其實pack是和控件的佈局排版有關西的。
再添加一個按鈕就可以有更加豐富的內容了,方法是很相似的。看着吧:app
只不過把button替換了label而Button替換了Label。注意一下Button和Label這些都是Tkinter這些庫提供的,而button和Button這樣大小寫之間的差異僅僅是巧合,你可以隨便的給變量取名字,可是Button和Label這些則是須要記住的東西,寫代碼的時候要常常用到的名字。可是點擊按鈕你會比較失望,由於並無什麼反應。不過也是固然的事情,你並無告訴計算機對於這樣一個按鈕的點擊操做須要做出一個什麼樣的反應來反饋給用戶。而這個指定做出什麼反應的工做只須要一個行,可是做出具體什麼樣反應的描述則須要新建一個函數來進行處理。框架
button['command'] = on_click表示對於button(按鈕)的點擊屬性用on_click這個函數來處理。而on_click函數也很簡潔,只是把label的文本從新設置一下。這個完成了一個事件消息的處理,若是用C來寫,須要比這個長更加很差懂的寫法。另外你是否會對on_click中出現label這個變量比較奇怪呢?明明在on_click前面沒有定義label這個變量啊。若是我在C中這麼寫程序,編譯器必定會告訴我出錯的。而python是怎麼知道label這個變量存在,而後沒有報錯的呢?其實python在你寫的時候根本就不用知道其是否存在,只是要在運行的時候找獲得label就能夠了。而運行的先後關係,是經過時間來關聯的而不是代碼上先後行的關係。這裏因爲label = Label(root)先於on_click執行,因此當on_click執行的時候,label就是一個已經定義的變量。若是沒有定義呢?那就報告出錯嘍。
最後一個例子:ide
這個就比較複雜了。裏面有一個StringVar。這個表明一個字符串,可是跟通常字符串不同。通常的這樣'dfsdf'的字符串是不可變的,你只能把變量指定爲不一樣的字符串,可是字符串自己的內容是不可改變的。而StringVar則是可變的字符串。因此了set和get來設置和取得其內容。主要是entry(單行輸入框)要求一個這樣的屬性來設置和接收其輸入框的內容。函數
用Tkinter實現一個簡單的GUI程序,單擊click按鈕時會在終端打印出’hello world’:
工具
當咱們寫一個較大的程序時,最好將代碼分紅一個或者是幾個類,再看一下Hello World例子
oop
看完了上面兩個無聊的Hello World例子,再來看一個稍微Perfect點的東西吧。Menu組件,本身畫一個像樣點的程序外殼。
這個程序仍是有點無趣,由於咱們只是建立了一個頂級的導航菜單,點擊後只是在終端中輸出hello而已,下面來建立一個下拉菜單,這樣纔像一個正兒八經的應用在下面的這個例子中,會建立三個頂級菜單,每一個頂級菜單中都有下拉菜單(用add_command方法建立,最後用add_cascade方法加入到上級菜單中去),爲每一個下拉選項都綁定一個hello函數,在終端中打印出hello.
root.quit是退出這個Tk的實例。
寫了這一些,差很少對Tkinter有了一個大致的印象了。在Python中用Tkinter繪製GUI界面仍是蠻簡單的。再把上面的例子擴展一下,和Label標籤結合,當單擊about的時候,在窗體上打印About的內容,而不是在終端輸出。將about函數稍微修改一下。單擊about之後將會調用about函數渲染frame繪製一個標籤並顯示其內容。
|
def about(): w = Label(root,text="開發者感謝名單\nfuyunbiyi\nfyby還沒有出現的女友\nhttp://www.programup.com網站") w.pack(side=TOP)
Tkinter的提供各類控件,如按鈕,標籤和文本框,一個GUI應用程序中使用。這些控件一般被稱爲控件或者部件。
目前有15種Tkinter的部件。咱們提出這些部件以及一個簡短的介紹,在下面的表:
控件 | 描述 |
Label | Label widget which can display text and bitmaps標籤控件;能夠顯示文本和位圖 |
Button | 按鈕控件;在程序中顯示按鈕 |
Entry | Entry widget which allows to display simple text輸入控件;用於顯示簡單的文本內容 |
Checkbutton | Checkbutton widget which is either in on- or off-state多選框控件;用於在程序中提供多項選擇框 |
Listbox | Listbox widget which can display a list of strings.列表框控件;在Listbox窗口小部件是用來顯示一個字符串列表給用戶 |
Scale | Scale widget which can display a numerical scale範圍控件;顯示一個數值刻度,爲輸出限定範圍的數字區間 |
Spinbox | 輸入控件;與Entry相似,可是能夠指定輸入範圍值 |
Menu | Menu widget which allows to display menu bars, pull-down menus and pop-up menus菜單控件;顯示菜單欄,下拉菜單和彈出菜單 |
Message | Message widget to display multiline text. Obsolete since Label does it too消息控件;用來顯示多行文本,與label比較相似 |
OptionMenu | OptionMenu which allows the user to select a value from a menu.可選菜單控件;容許用戶在菜單中選擇值 |
Radiobutton | Radiobutton widget which shows only one of several buttons in on-state單選按鈕控件;顯示一個單選的按鈕狀態 |
Frame | Frame widget which may contain other widgets and can have a 3D border框架控件;在屏幕上顯示一個矩形區域,多用來做爲容器 |
Toplevel | Toplevel widget, e.g. for dialogs.容器控件;用來提供一個單獨的對話框,和Frame比較相似 |
Text | Text widget which can display text in various forms文本控件;用於顯示多行文本 |
Canvas | Canvas widget to display graphical elements like lines or text.畫布控件;顯示圖形元素如線條或文本 |
Event | Container for the properties of an event.事件控件; |
標準屬性也就是全部控件的共同屬性,如大小,字體和顏色等等。
屬性 | 描述 |
Dimension | 控件大小; |
Color | 控件顏色; |
Font | 控件字體; |
Anchor | 錨點; |
Relief | 控件樣式; |
Bitmap | 位圖; |
Cursor | 光標; |
幾何管理:
Tkinter控件有特定的幾何狀態管理方法,管理整個控件區域組織,一下是Tkinter公開的幾何管理類:包、網格、位置
幾何方法 | 描述 |
pack() | 包裝; |
grid() | 網格; |
place() | 位置; |