19.2 Tkinter與python編程 python
19.2.1 Tkinger模塊:把Tk引入您的程序 編程
要建立並運行您的GUI程序,下面五步是基本的: 框架
1. 導入Tkinter模塊 函數
2. 建立一個頂層窗口對象,來容納您的整個GUI程序 oop
3. 在您的頂層窗口對象上建立全部的GUI模塊。 ui
4. 把這些GUI模塊與頂層程序相鏈接 code
5. 進入主事件循環 對象
19.2.2 GUI程序開發簡介 事件
一般,組件會有一些相應的行爲,例如按鈕被按下,或者文本框被寫入。這種形式的用戶行爲被稱爲事件,而GUI程序對事件所採起的響應動做被稱爲回調。 圖片
用戶操做包括按下按鈕,移動鼠標等等,全部的這些從系統角度都被看做時間。GUI程序正是由這伴隨其始末的整套事件體系所驅動的。這個過程被稱做事件驅動處理。
19.2.4 TK組件
組件 描述
Button 按鈕。相似標籤,但提供額外的功能,例如鼠標掠過、按下、釋放以及鍵盤操做/事件
Canvas 畫布。提供繪圖功能(直線、橢圓、多邊形、矩形);能夠包含圖形或位圖
Checkbutton 選擇按鈕。一組方框,能夠選擇其中的任意個(相似HTML 中的checkbox)
Entry 文本框。單行文字域,用來收集鍵盤輸入(相似HTML 中的text)
Frame 框架。包含其餘組件的純容器
Label 標籤。用來顯示文字或圖片
Listbox 列表框。一個選項列表,用戶能夠從中選擇
Menu 菜單。點下菜單按鈕後彈出的一個選項列表,用戶能夠從中選擇
Menubutton 菜單按鈕。用來包含菜單的組件(有下拉式、層疊式等等)
Message 消息框。相似於標籤,但能夠顯示多行文本
Radiobutton 單選按鈕。一組按鈕,其中只有一個可被「按下」(相似HTML 中的radio)
Scale 進度條。線性「滑塊」組件,可設定起始值和結束值,會顯示當前位置的精確值
Scrollbar 滾動條。對其支持的組件(文本域、畫布、列表框、文本框)提供滾動功能
Text 文本域。多行文字區域,可用來收集(或顯示)用戶輸入的文字(相似HTML 中的textarea)
Toplevel 頂級。相似框架,但提供一個獨立的窗口容器。
咱們來看看第一個GUI的例子:
import Tkinter top = Tkinter.Tk() label = Tkinter.Label(top, text = "hello world!") label.pack() Tkinter.mainloop()程序輸出:
19.3 Tkinter舉例
19.3.2 按鈕組件
import Tkinter top = Tkinter.Tk() quit = Tkinter.Button(top, text = "hello world!", command = top.quit) quit.pack() Tkinter.mainloop()程序輸出:
19.3.3 標籤和按鈕組件
import Tkinter top = Tkinter.Tk() hello = Tkinter.Label(top, text = "hello world!") hello.pack() quit = Tkinter.Button(top, text = "quit", command = top.quit, bg = "red",fg = "white") quit.pack(fill = Tkinter.X, expand = 1) Tkinter.mainloop()程序輸出:
19.3.4 標籤,按鈕和進度條組件
雖然整個程序看的有點懂,可是總感受缺乏點什麼,就是缺乏點感受:
from Tkinter import * def resize(ev = None): label.config(font = "Helvetica -%d bold" % scale.get()) top = Tk() top.geometry("250x150") label = Label(top, text = "hello world!", font = "Helvetica -12 bold") label.pack(fill = Y, expand = 1) scale = Scale(top, from_ = 10, to = 40, orient = HORIZONTAL, command=resize) scale.set(12) scale.pack(fill = X, expand = 1) quit = Button(top, text = "QUIT", command = top.quit, activeforeground = "white", activebackground = "red") quit.pack() mainloop()程序輸出:
19.3.5 偏函數的使用
from functools import partial as pto from Tkinter import Tk, Button,X from tkMessageBox import showinfo, showwarning, showerror WARN = "warn" CRIT = "crit" REGU = "regu" SIGNS = { "do not enter" : CRIT, "railroad crossing" : WARN, "55\nspeed limit" : REGU, "wrong way" : CRIT, "merging traffic" : WARN, "one way" : REGU, } critCB = lambda: showerror("error","error button pressed!") warnCB = lambda: showwarning("warning","warning button pressed!") infoCB = lambda: showinfo("info","info button pressed!") top = Tk() top.title("road signs") Button(top, text = "quit", command = top.quit, bg = "red", fg = "white").pack() MyButton = pto(Button, top) CritButton = pto(MyButton, command = critCB, bg = "white", fg = "red") WarnButton = pto(MyButton, command = warnCB, bg = "goldenrod1") ReguButton = pto(MyButton, command = infoCB, bg = "white") for eachSign in SIGNS: signType = SIGNS[eachSign] cmd = "%sButton(text = %r%s).pack(fill = X, expand = True)" %\ (signType.title(), eachSign,".upper()" if signType == CRIT else ".title()") eval(cmd) top.mainloop()程序輸出:
這個程序很帥!
19.3.6 中級Tkinter範例
GUI文件遍歷系統