1. 程式人生 > 實用技巧 >tkinter python(圖形開發介面)

tkinter python(圖形開發介面)

  Tkinter模組("Tk 介面")是Python的標準Tk GUI工具包的介面.Tk和Tkinter可以在大多數的Unix平臺下使用,同樣可以應用在Windows和Macintosh系統裡.Tk8.0的後續版本可以實現本地視窗風格,並良好地執行在絕大多數平臺中。

?
1234567891011121314151617181920212223242526272829303132目錄:1、簡單例項2、Label控制元件3、Button控制元件4、Entry控制元件5、點選按鈕輸出輸入框中的內容6、Text控制元件7、帶滾動條的Text8、Checkbutton多選框控制元件9、Radiobutton單選框
10、Listbox控制元件一11、Listbox控制元件二12、Listbox控制元件三13、Listbox四14、Scale控制元件15、Spinbox控制元件16、Menu頂層選單17、Menu滑鼠右鍵選單18、Combobox下拉控制元件19、Frame控制元件20、表格資料21、樹狀資料22、絕對佈局23、相對佈局24、表格佈局25、滑鼠點選事件26、滑鼠移動事件27、滑鼠釋放事件28、進入和離開事件29、響應所有按鍵的事件30、響應特殊按鍵事件31、指定按鍵事件32、組合按鍵事件

1、簡單例項

  下面的程式碼是創建出一個視窗,其他的操作就在這個平臺上進行。執行之後會在桌面彈出一個視窗,視窗的標題就是程式碼中設定的win.title。這裡說一下,我使用的版本是python3.6。後面的內容儘量按順序看,後面的控制元件也許用到前面寫到的東西。

 1 #!/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3 
 4 import tkinter
 5 
 6 
 7 # 建立主視窗
 8 win = tkinter.Tk()
 9 # 設定標題
10 win.title("yudanqu")
11 # 設定大小和位置
12 win.geometry("400x400+200+50")
13 
14 # 進入訊息迴圈,可以寫控制元件
15 
16 win.mainloop()

2、Label控制元件

 1 #!/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3 
 4
import tkinter 5 6 win = tkinter.Tk() 7 win.title("yudanqu") 8 win.geometry("400x400+200+50") 9 10 ''' 11 Label:標籤控制元件,可以顯示文字 12 ''' 13 # win:父窗體 14 # text:顯示的文字內容 15 # bg:背景色 16 # fg:字型顏色 17 # font:字型 18 # wraplength:指定text文字中多寬之後換行 19 # justify:設定換行後的對齊方式 20 # anchor:位置 n北,e東,w西,s南,center居中;還可以寫在一起:ne東北方向 21 label = tkinter.Label(win, 22 text="this is a word", 23 bg="pink", fg="red", 24 font=("黑體", 20), 25 width=20, 26 height=10, 27 wraplength=100, 28 justify="left", 29 anchor="ne") 30 31 # 顯示出來 32 label.pack() 33 34 35 win.mainloop()

3、Button控制元件

 1 #!/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3 
 4 import tkinter
 5 
 6 
 7 def func():
 8     print("aaaaaaaaaaaaaaaaaaaaaaa")
 9 
10 
11 win = tkinter.Tk()
12 win.title("yudanqu")
13 win.geometry("400x400+200+50")
14 
15 
16 # 建立按鈕
17 button1 = tkinter.Button(win, text="按鈕", command=func, width=10, height=10)
18 button1.pack()
19 
20 button2 = tkinter.Button(win, text="按鈕", command=lambda: print("bbbbbbbbbbbb"))
21 button2.pack()
22 
23 button3 = tkinter.Button(win, text="退出", command=win.quit)
24 button3.pack()
25 
26 win.mainloop()

4、Entry控制元件

 1 #!/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3 
 4 import tkinter
 5 
 6 win = tkinter.Tk()
 7 win.title("yudanqu")
 8 win.geometry("400x400+200+50")
 9 
10 '''
11 Entry:輸入控制元件,用於顯示簡單的文字內容
12 '''
13 
14 # 密文顯示
15 entry1 = tkinter.Entry(win, show="*") # show="*" 可以表示輸入密碼
16 entry1.pack()
17 
18 # 繫結變數
19 e = tkinter.Variable()
20 
21 entry2 = tkinter.Entry(win, textvariable=e)
22 entry2.pack()
23 
24 # e就代表輸入框這個物件
25 # 設定值
26 e.set("wewewewewewe")
27 # 取值
28 print(e.get())
29 print(entry2.get())
30 
31 win.mainloop()

5、點選按鈕輸出輸入框中的內容

 1 #!/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3 import tkinter
 4 
 5 win = tkinter.Tk()
 6 win.title("yudanqu")
 7 win.geometry("400x400+200+50")
 8 
 9 def showinfo():
10     # 獲取輸入的內容
11     print(entry.get())
12 
13 entry = tkinter.Entry(win)
14 entry.pack()
15 
16 button = tkinter.Button(win, text="按鈕", command=showinfo)
17 button.pack()
18 
19 win.mainloop()

6、Text控制元件

 1 #!/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3 import tkinter
 4 
 5 win = tkinter.Tk()
 6 win.title("yudanqu")
 7 win.geometry("400x400+200+50")
 8 
 9 '''
10 文字控制元件:用於顯示多行文字
11 '''
12 
13 # height表示的是顯示的行數
14 text = tkinter.Text(win, width=30, height=10)
15 text.pack()
16 
17 str = '''蓋聞天地之數,有十二萬九千六百歲為一元。將一元分為十二會,乃子、醜、寅、卯、辰、巳、午、未、申、酉、戌、亥之十二支也。每會該一萬八百歲。且就一日而論:子時得陽氣,而醜則雞鳴;寅不通光,而卯則日出;辰時食後,而巳則挨排;日午天中,而未則西蹉;申時晡而日落酉;戌黃昏而人定亥。譬於大數,若到戌會之終,則天地昏蒙而萬物否矣。再去五千四百歲,交亥會之初,則當黑暗,而兩間人物俱無矣,故曰混沌。又五千四百歲,亥會將終,貞下起元,近子之會,而復逐漸開明。邵康節曰:“冬至子之半,天心無改移。一陽初動處,萬物未生時。”到此,天始有根。再五千四百歲,正當子會,輕清上騰,有日,有月,有星,有辰。日、月、星、辰,謂之四象。故曰,天開於子。又經五千四百歲,子會將終,近醜之會,而逐漸堅實。易曰:“大哉乾元!至哉坤元!萬物資生,乃順承天。”至此,地始凝結。再五千四百歲,正當醜會,重濁下凝,有水,有火,有山,有石,有土。水、火、山、石、土謂之五形。故曰,地闢於醜。又經五千四百歲,醜會終而寅會之初,發生萬物。'''
18 
19 text.insert(tkinter.INSERT, str)
20 
21 win.mainloop()

7、帶滾動條的Text

 1 #!/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3 
 4 
 5 import tkinter
 6 
 7 win = tkinter.Tk()
 8 win.title("yudanqu")
 9 # win.geometry("400x400+200+50")
10 
11 '''
12 文字控制元件:用於顯示多行文字
13 '''
14 
15 # 建立滾動條
16 scroll = tkinter.Scrollbar()
17 
18 text = tkinter.Text(win, width=30, height=10)
19 # side放到窗體的哪一側,  fill填充
20 scroll.pack(side=tkinter.RIGHT, fill=tkinter.Y)
21 text.pack(side=tkinter.LEFT, fill=tkinter.Y)
22 # 關聯
23 scroll.config(command=text.yview)
24 text.config(yscrollcommand=scroll.set)
25 
26 text.pack()
27 
28 str = '''蓋聞天地之數,有十二萬九千六百歲為一元。將一元分為十二會,乃子、醜、寅、卯、辰、巳、午、未、申、酉、戌、亥之十二支也。每會該一萬八百歲。且就一日而論:子時得陽氣,而醜則雞鳴;寅不通光,而卯則日出;辰時食後,而巳則挨排;日午天中,而未則西蹉;申時晡而日落酉;戌黃昏而人定亥。譬於大數,若到戌會之終,則天地昏蒙而萬物否矣。再去五千四百歲,交亥會之初,則當黑暗,而兩間人物俱無矣,故曰混沌。又五千四百歲,亥會將終,貞下起元,近子之會,而復逐漸開明。邵康節曰:“冬至子之半,天心無改移。一陽初動處,萬物未生時。”到此,天始有根。再五千四百歲,正當子會,輕清上騰,有日,有月,有星,有辰。日、月、星、辰,謂之四象。故曰,天開於子。又經五千四百歲,子會將終,近醜之會,而逐漸堅實。易曰:“大哉乾元!至哉坤元!萬物資生,乃順承天。”至此,地始凝結。再五千四百歲,正當醜會,重濁下凝,有水,有火,有山,有石,有土。水、火、山、石、土謂之五形。故曰,地闢於醜。又經五千四百歲,醜會終而寅會之初,發生萬物。'''
29 
30 text.insert(tkinter.INSERT, str)
31 
32 win.mainloop()

8、Checkbutton多選框控制元件

 1 #!/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3 import tkinter
 4 
 5 win = tkinter.Tk()
 6 win.title("yudanqu")
 7 win.geometry("400x400+200+50")
 8 
 9 def updata():
10     message = ""
11     if hobby1.get() ==True:
12         message += "money\n"
13     if hobby2.get() == True:
14         message += "power\n"
15     if hobby3.get() == True:
16         message += "people\n"
17 
18     # 清空text中所有內容
19     text.delete(0.0, tkinter.END)
20     text.insert(tkinter.INSERT, message)
21 
22 # 要繫結的變數
23 hobby1 = tkinter.BooleanVar()
24 # 多選框
25 check1 = tkinter.Checkbutton(win, text="money", variable=hobby1, command=updata)
26 check1.pack()
27 hobby2 = tkinter.BooleanVar()
28 check2 = tkinter.Checkbutton(win, text="power", variable=hobby2, command=updata)
29 check2.pack()
30 hobby3 = tkinter.BooleanVar()
31 check3 = tkinter.Checkbutton(win, text="people", variable=hobby3, command=updata)
32 check3.pack()
33 
34 text = tkinter.Text(win, width=50, height=5)
35 text.pack()
36 
37 win.mainloop()

9、Radiobutton單選框

 1 import tkinter
 2 
 3 win = tkinter.Tk()
 4 win.title("yudanqu")
 5 win.geometry("400x400+200+50")
 6 
 7 def updata():
 8     print(r.get())
 9 
10 # 繫結變數,一組單選框要繫結同一個變數,就能區分出單選框了
11 r = tkinter.IntVar()
12 
13 radio1 = tkinter.Radiobutton(win, text="one", value=1, variable=r, command=updata)
14 radio1.pack()
15 radio2 = tkinter.Radiobutton(win, text="two", value=2, variable=r, command=updata)
16 radio2.pack()
17 
18 win.mainloop()

10、Listbox控制元件一

 1 #!/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3 import tkinter
 4 
 5 win = tkinter.Tk()
 6 win.title("yudanqu")
 7 win.geometry("400x400+200+50")
 8 
 9 '''
10 列表框控制元件:可以包含一個或多個文字框
11 作用:在listbox控制元件的小視窗顯示一個字串
12 '''
13 
14 # 建立一個listbox,新增幾個元素
15 lb = tkinter.Listbox(win, selectmode=tkinter.BROWSE)
16 lb.pack()
17 
18 for item in ["good", "nice", "handsome", "aaa", "bbb", "ccc", "ddd"]:
19     # 按順序新增
20     lb.insert(tkinter.END, item)
21 
22 # 在開始新增
23 lb.insert(tkinter.ACTIVE, "cool")
24 
25 # 將列表當做一個元素新增
26 # lb.insert(tkinter.END, ["very good", "very nice"])
27 
28 # 刪除:引數1為開始的索引,引數2為結束的索引,如果不指定引數2,只刪除第一個索引處的內容
29 lb.delete(1,3)
30 
31 # 選中:引數1為開始的索引,引數2為結束的索引,如果不指定引數2,只選中第一個索引處的內容
32 lb.select_set(2,3)
33 
34 # 取消選中:引數1為開始的索引,引數2為結束的索引,如果不指定引數2,只取消第一個索引處的內容
35 lb.select_clear(2)
36 
37 # 獲取到列表中的元素個數
38 print(lb.size())
39 # 獲取值
40 print(lb.get(2,3))
41 
42 # 返回當前的索引項,不是item元素
43 print(lb.curselection())
44 
45 # 判斷:一個選項是否被選中
46 print(lb.selection_includes(3))
47 
48 win.mainloop()

11、Listbox控制元件二

 1 import tkinter
 2 
 3 win = tkinter.Tk()
 4 win.title("yudanqu")
 5 win.geometry("400x400+200+50")
 6 
 7 # 繫結變數
 8 lbv = tkinter.StringVar()
 9 
10 # 與BORWSE相似,但是不支援滑鼠按下後移動選中位置
11 lb = tkinter.Listbox(win, selectmode=tkinter.SINGLE, listvariable=lbv)
12 lb.pack()
13 
14 for item in ["good", "nice", "handsome", "aaa", "bbb", "ccc", "ddd"]:
15     # 按順序新增
16     lb.insert(tkinter.END, item)
17 
18 # 列印當前列表中的選型
19 print(lbv.get())
20 
21 # 設定選項
22 # lbv.set(("1","2","3"))
23 
24 # 繫結事件
25 def myprint(event):
26     # print(lb.curselection()) # 返回下標
27     print(lb.get(lb.curselection())) # 返回值
28 lb.bind("<Double-Button-1>", myprint)
29 
30 win.mainloop()

12、Listbox控制元件三

 1 import tkinter
 2 
 3 win = tkinter.Tk()
 4 win.title("yudanqu")
 5 # win.geometry("400x400+200+50")
 6 
 7 # EXTENDED:可以使listbox支援shift和Ctrl
 8 lb = tkinter.Listbox(win, selectmode=tkinter.EXTENDED)
 9 lb.pack()
10 
11 for item in ["good", "nice", "handsome", "aaa", "bbb", "ccc", "ddd", "good", "nice", "handsome", "aaa", "bbb", "ccc", "ddd", "good", "nice", "handsome", "aaa", "bbb", "ccc", "ddd", "good", "nice", "handsome", "aaa", "bbb", "ccc", "ddd", "good", "nice", "handsome", "aaa", "bbb", "ccc", "ddd"]:
12     # 按順序新增
13     lb.insert(tkinter.END, item)
14 
15 # 滾動條
16 sc = tkinter.Scrollbar(win)
17 sc.pack(side=tkinter.RIGHT, fill=tkinter.Y)
18 # 配置
19 lb.configure(yscrollcommand=sc.set)
20 lb.pack(side=tkinter.LEFT, fill=tkinter.BOTH)
21 # 額外給屬性賦值
22 sc["command"] = lb.yview
23 
24 win.mainloop()

13、Listbox四

 1 import tkinter
 2 
 3 win = tkinter.Tk()
 4 win.title("yudanqu")
 5 win.geometry("400x400+200+50")
 6 
 7 # MULTIPLE支援多選
 8 lb = tkinter.Listbox(win, selectmode=tkinter.MULTIPLE)
 9 lb.pack()
10 
11 for item in ["good", "nice", "handsome", "aaa", "bbb", "ccc", "ddd"]:
12     # 按順序新增
13     lb.insert(tkinter.END, item)
14 
15 win.mainloop()

14、Scale控制元件

 1 import tkinter
 2 
 3 win = tkinter.Tk()
 4 win.title("yudanqu")
 5 win.geometry("400x400+200+50")
 6 
 7 '''
 8 供使用者通過拖拽指示器來改變變數的值,可以水平,也可以豎直
 9 '''
10 
11 # tkinter.HORIZONTAL水平
12 # tkinter.VERTICAL 豎直(預設)
13 # length:水平時表示寬度,豎直時表示高度
14 # tickintervar :選擇值將會為該值得倍數
15 
16 scale1 = tkinter.Scale(win, from_=0, to=100, orient=tkinter.HORIZONTAL, tickinterval=10, length=200)
17 scale1.pack()
18 
19 # 設定值
20 scale1.set(20)
21 
22 # 取值
23 # print(scale1.get())
24 
25 def showNum():
26     print(scale1.get())
27 tkinter.Button(win, text="按鈕", command=showNum).pack()
28 
29 win.mainloop()

15、Spinbox控制元件

 1 import tkinter
 2 
 3 win = tkinter.Tk()
 4 win.title("yudanqu")
 5 win.geometry("400x400+200+50")
 6 
 7 '''
 8 數值範圍控制元件
 9 '''
10 
11 # 繫結變數
12 v = tkinter.StringVar()
13 
14 def updata():
15     print(v.get())
16 
17 # increment:步長,預設為1
18 # values要輸入一個元組 最好不要和from和to同時使用,而且步長也沒用
19 # command 只要值改變就會執行updata方法
20 sp = tkinter.Spinbox(win, from_=0, to=100, increment=5,
21                      textvariable=v, command=updata)
22 # sp = tkinter.Spinbox(win, values=(0,2,4,6,8))
23 sp.pack()
24 
25 # 賦值
26 v.set(20)
27 # 取值
28 print(v.get())
29 
30 win.mainloop()

16、Menu頂層選單

 1 import tkinter
 2 
 3 win = tkinter.Tk()
 4 win.title("yudanqu")
 5 win.geometry("400x400+200+50")
 6 
 7 # 選單條
 8 menubar = tkinter.Menu(win)
 9 win.config(menu=menubar)
10 
11 def func():
12     print("**********")
13 
14 # 建立一個選單選項
15 menu1 = tkinter.Menu(menubar, tearoff=False)
16 
17 # 給選單選項新增內容
18 for item in ['python','c','java','c++', 'c#','php','B','退出']:
19     if item == '退出':
20         # 新增分割線
21         menu1.add_separator()
22         menu1.add_command(label=item, command=win.quit)
23     else:
24         menu1.add_command(label=item, command=func)
25 
26 # 向選單條上新增選單選項
27 menubar.add_cascade(label='語言', menu=menu1)
28 
29 win.mainloop()

17、Menu滑鼠右鍵選單

 1 import tkinter
 2 
 3 win = tkinter.Tk()
 4 win.title("yudanqu")
 5 win.geometry("400x400+200+50")
 6 
 7 # 選單條
 8 menubar = tkinter.Menu(win)
 9 
10 def func():
11     print("**********")
12 
13 # 選單
14 menu = tkinter.Menu(menubar, tearoff=False)
15 # 給選單選項新增內容
16 for item in ['python','c','java','c++', 'c#','php','B','退出']:
17     if item == '退出':
18         # 新增分割線
19         menu.add_separator()
20         menu.add_command(label=item, command=win.quit)
21     else:
22         menu.add_command(label=item, command=func)
23 
24 menubar.add_cascade(label="語言", menu=menu)
25 
26 def showMenu(event):
27     menubar.post(event.x_root, event.y_root)
28 
29 win.bind("<Button-3>", showMenu)
30 
31 win.mainloop()

18、Combobox下拉控制元件

 1 import tkinter
 2 from tkinter import ttk
 3 
 4 win = tkinter.Tk()
 5 win.title("yudanqu")
 6 win.geometry("400x400+200+50")
 7 
 8 # 繫結變數
 9 cv = tkinter.StringVar()
10 
11 com = ttk.Combobox(win, textvariable=cv)
12 com.pack()
13 
14 # 設定下拉資料
15 com["value"] = ("黑龍江", "吉林", "遼寧")
16 
17 # 設定預設值
18 com.current(0)
19 
20 # 繫結事件
21 
22 def func(event):
23     print(com.get())
24     print(cv.get())
25 com.bind("<<ComboboxSelected>>", func)
26 
27 win.mainloop()

19、Frame控制元件

 1 import tkinter
 2 
 3 win = tkinter.Tk()
 4 win.title("yudanqu")
 5 win.geometry("400x400+200+50")
 6 
 7 '''
 8 框架控制元件:在桌面上顯示一個矩形區域,多作為一個容器控制元件
 9 '''
10 
11 frm = tkinter.Frame(win)
12 frm.pack()
13 
14 # left
15 frm_l = tkinter.Frame(frm)
16 tkinter.Label(frm_l, text="左上", bg="pink").pack(side=tkinter.TOP)
17 tkinter.Label(frm_l, text="左下", bg="blue").pack(side=tkinter.TOP)
18 frm_l.pack(side=tkinter.LEFT)
19 
20 # right
21 frm_r = tkinter.Frame(frm)
22 tkinter.Label(frm_r, text="右上", bg="green").pack(side=tkinter.TOP)
23 tkinter.Label(frm_r, text="右下", bg="red").pack(side=tkinter.TOP)
24 frm_r.pack(side=tkinter.RIGHT)
25 
26 win.mainloop()

20、表格資料

 1 import tkinter
 2 from tkinter import ttk
 3 
 4 win = tkinter.Tk()
 5 win.title("yudanqu")
 6 win.geometry("600x400+200+50")
 7 
 8 # 表格
 9 tree = ttk.Treeview(win)
10 tree.pack()
11 
12 # 定義列
13 tree["columns"] = ("姓名","年齡","身高","體重")
14 # 設定列,列還不顯示
15 tree.column("姓名", width=100)
16 tree.column("年齡", width=100)
17 tree.column("身高", width=100)
18 tree.column("體重", width=100)
19 
20 # 設定表頭
21 tree.heading("姓名", text="姓名-name")
22 tree.heading("年齡", text="年齡-age")
23 tree.heading("身高", text="身高-height")
24 tree.heading("體重", text="體重-weight")
25 
26 # 新增資料
27 tree.insert("", 0, text="line1", values=("小鄭","34","177cm","70kg"))
28 tree.insert("", 1, text="line2", values=("小張","43","188cm","90kg"))
29 
30 win.mainloop()

21、樹狀資料

 1 import tkinter
 2 from tkinter import ttk
 3 
 4 win = tkinter.Tk()
 5 win.title("yudanqu")
 6 win.geometry("400x400+200+50")
 7 
 8 tree = ttk.Treeview(win)
 9 tree.pack()
10 
11 # 新增一級樹枝
12 treeF1 = tree.insert("",0,"中國",text= "中國Chi", values=("F1"))
13 treeF2 = tree.insert("",1,"美國",text= "美國USA", values=("F1"))
14 treeF3 = tree.insert("",2,"英國",text= "英國UK", values=("F1"))
15 
16 # 二級樹枝
17 treeF1_1 = tree.insert(treeF1,0,"黑龍江",text="中國黑龍江",values=("F1_1"))
18 treeF1_2 = tree.insert(treeF1,1,"吉林",text="中國吉林",values=("F1_2"))
19 treeF1_3 = tree.insert(treeF1,2,"遼寧",text="中國遼寧",values=("F1_3"))
20 
21 treeF2_1 = tree.insert(treeF2,0,"aaa",text="aaaa",values=("F2_1"))
22 treeF2_2 = tree.insert(treeF2,1,"bbb",text="bbbb",values=("F2_2"))
23 treeF2_3 = tree.insert(treeF2,2,"ccc",text="cccc",values=("F2_3"))
24 
25 # 三級樹枝
26 treeF1_1_1 = tree.insert(treeF1_1,0,"哈爾濱",text="黑龍江哈爾濱")
27 treeF1_1_2 = tree.insert(treeF1_1,1,"五常",text="黑龍江五常")
28 
29 win.mainloop()

22、絕對佈局

 1 import tkinter
 2 
 3 win = tkinter.Tk()
 4 win.title("yudanqu")
 5 win.geometry("400x400+200+50")
 6 
 7 label1 = tkinter.Label(win, text="good", bg="blue")
 8 label2 = tkinter.Label(win, text="nice", bg="red")
 9 label3 = tkinter.Label(win, text="cool", bg="green")
10 
11 # 絕對佈局,視窗的變化對位置沒有影響
12 label1.place(x=10,y=10)
13 label2.place(x=50,y=50)
14 label3.place(x=100,y=100)
15 
16 win.mainloop()

23、相對佈局

 1 import tkinter
 2 
 3 win = tkinter.Tk()
 4 win.title("yudanqu")
 5 win.geometry("400x400+200+50")
 6 
 7 label1 = tkinter.Label(win, text="good", bg="blue")
 8 label2 = tkinter.Label(win, text="nice", bg="red")
 9 label3 = tkinter.Label(win, text="cool", bg="green")
10 
11 # 相對佈局,窗體改變對控制元件有影響
12 label1.pack(fill=tkinter.Y, side=tkinter.LEFT)
13 label2.pack(fill=tkinter.X, side=tkinter.TOP)
14 label3.pack()
15 
16 win.mainloop()

24、表格佈局

 1 import tkinter
 2 
 3 win = tkinter.Tk()
 4 win.title("yudanqu")
 5 win.geometry("400x400+200+50")
 6 
 7 label1 = tkinter.Label(win, text="good", bg="blue")
 8 label2 = tkinter.Label(win, text="nice", bg="red")
 9 label3 = tkinter.Label(win, text="cool", bg="green")
10 label4 = tkinter.Label(win, text="handsome", bg="yellow")
11 
12 # 表格佈局
13 label1.grid(row=0,column=0)
14 label2.grid(row=0,column=1)
15 label3.grid(row=1,column=0)
16 label4.grid(row=1,column=1)
17 
18 win.mainloop()

25、滑鼠點選事件

 1 import tkinter
 2 
 3 win = tkinter.Tk()
 4 win.title("yudanqu")
 5 win.geometry("400x400+200+50")
 6 
 7 
 8 def func(event):
 9     print(event.x, event.y)
10 
11 # <Button-1>  滑鼠左鍵
12 # <Button-2>  滑鼠滾輪
13 # <Button-1>  滑鼠右鍵
14 # <Double-Button-1>  滑鼠雙擊左鍵
15 # <Triple-Button-1>  滑鼠三擊左鍵
16 
17 button1 = tkinter.Button(win, text="leftmouse button")
18 # bind 給控制元件繫結資料(引數一是繫結的事件,引數二是觸發事件的函式)
19 button1.bind("<Button-1>", func)
20 button1.pack()
21 
22 win.mainloop()

26、滑鼠移動事件

 1 import tkinter
 2 
 3 win = tkinter.Tk()
 4 win.title("yudanqu")
 5 win.geometry("400x400+200+50")
 6 
 7 
 8 # <B1-Motion>  左鍵移動
 9 # <B2-Motion>  中鍵移動
10 # <B3-Motion>  右鍵移動
11 
12 
13 label = tkinter.Label(win, text="*********")
14 label.pack()
15 
16 def func(event):
17     print(event.x, event.y)
18 
19 label.bind("<B1-Motion>", func)
20 
21 win.mainloop()

27、滑鼠釋放事件

 1 import tkinter
 2 
 3 win = tkinter.Tk()
 4 win.title("yudanqu")
 5 win.geometry("400x400+200+50")
 6 
 7 # <ButtonRelease-1> 釋放滑鼠左鍵
 8 # <ButtonRelease-2> 釋放滑鼠中鍵
 9 # <ButtonRelease-3> 釋放滑鼠右鍵
10 
11 
12 label = tkinter.Label(win, text="*********", bg="red")
13 label.pack()
14 
15 def func(event):
16     print(event.x, event.y)
17 
18 label.bind("<ButtonRelease-1>", func)
19 
20 win.mainloop()

28、進入和離開事件

 1 import tkinter
 2 
 3 win = tkinter.Tk()
 4 win.title("yudanqu")
 5 win.geometry("400x400+200+50")
 6 
 7 # <Enter>  當滑鼠進入控制元件時觸發事件
 8 # <Leave>  當滑鼠離開控制元件時觸發事件
 9 
10 label = tkinter.Label(win, text="*********", bg="red")
11 label.pack()
12 
13 def func(event):
14     print(event.x, event.y)
15 
16 label.bind("<Enter>", func)
17 label.bind("<Leave>", func)
18 
19 
20 win.mainloop()

29、響應所有按鍵的事件

 1 import tkinter
 2 
 3 win = tkinter.Tk()
 4 win.title("yudanqu")
 5 win.geometry("400x400+200+50")
 6 
 7 # <Key>  響應所有的按鍵(要有焦點)
 8 
 9 label = tkinter.Label(win, text="*********", bg="red")
10 # 設定焦點
11 label.focus_set()
12 label.pack()
13 
14 def func(event):
15     print("event.char=", event.char)
16     print("event.keycode=", event.keycode)
17 
18 label.bind("<Key>", func)
19 
20 win.mainloop()

30、響應特殊按鍵事件

 1 import tkinter
 2 
 3 win = tkinter.Tk()
 4 win.title("yudanqu")
 5 win.geometry("400x400+200+50")
 6 
 7 # <Shift_L>  只響應左側的shift鍵
 8 # <Shift_R>
 9 # <F5>
10 # <Return>  也就是回車鍵
11 # <BackSpace>  返回,也就是退格鍵
12 
13 label = tkinter.Label(win, text="*********", bg="red")
14 # 設定焦點
15 label.focus_set()
16 label.pack()
17 
18 def func(event):
19     print("event.char=", event.char)
20     print("event.keycode=", event.keycode)
21 
22 
23 label.bind("<Shift_L>", func)
24 
25 
26 win.mainloop()

31、指定按鍵事件

 1 import tkinter
 2 
 3 win = tkinter.Tk()
 4 win.title("yudanqu")
 5 win.geometry("400x400+200+50")
 6 
 7 
 8 label = tkinter.Label(win, text="*********", bg="red")
 9 # 設定焦點
10 label.focus_set()
11 label.pack()
12 
13 def func(event):
14     print("event.char=", event.char)
15     print("event.keycode=", event.keycode)
16 
17 
18 win.bind("a", func) # 注意前面改成了win,只需要寫出按鍵名即可
19 
20 
21 win.mainloop()

32、組合按鍵事件

 1 import tkinter
 2 
 3 win = tkinter.Tk()
 4 win.title("yudanqu")
 5 win.geometry("400x400+200+50")
 6 
 7 
 8 # <Control-Alt-a>
 9 # <Shift-Up>
10 # 只是control+alt不行
11 
12 label = tkinter.Label(win, text="*********", bg="red")
13 # 設定焦點
14 label.focus_set()
15 label.pack()
16 
17 def func(event):
18     print("event.char=", event.char)
19     print("event.keycode=", event.keycode)
20 
21 
22 win.bind("<Control-Alt-a>", func) # 注意前面改成了win,只需要寫出按鍵名即可
23 
24 
25 win.mainloop()