Tkinter模塊("Tk 接口")是Python的標准Tk GUI工具包的接口.Tk和Tkinter可以在大多數的Unix平台下使用,同樣可以應用在Windows和Macintosh系統里.Tk8.0的后續版本可以實現本地窗口風格,並良好地運行在絕大多數平台中。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
目錄:
1
、簡單實例
2
、Label控件
3
、Button控件
4
、Entry控件
5
、點擊按鈕輸出輸入框中的內容
6
、Text控件
7
、帶滾動條的Text
8
、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()
作者:
漁單渠 微信搜索“小田學Python”
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利.
<div class="clear"></div>
<div id="post_next_prev">
<a href="https://www.cnblogs.com/yudanqu/p/9464988.html" class="p_n_p_prefix">« </a> 上一篇: <a href="https://www.cnblogs.com/yudanqu/p/9464988.html" title="發布於 2018-08-12 21:25">mysql及python交互</a>
<br>
<a href="https://www.cnblogs.com/yudanqu/p/9727257.html" class="p_n_p_prefix">» </a> 下一篇: <a href="https://www.cnblogs.com/yudanqu/p/9727257.html" title="發布於 2018-09-30 07:04">1.1用圖表分析單變量數據</a>