tkinter python(圖形開發介面)
阿新 • • 發佈:2020-07-27
Tkinter模組("Tk 介面")是Python的標準Tk GUI工具包的介面.Tk和Tkinter可以在大多數的Unix平臺下使用,同樣可以應用在Windows和Macintosh系統裡.Tk8.0的後續版本可以實現本地視窗風格,並良好地執行在絕大多數平臺中。
?1234567891011121314151617181920212223242526272829303132 | 目錄: 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()