tkinter python(圖形開發界面)

  Tkinter模塊("Tk 接口")是Python的標準Tk GUI工具包的接口.Tk和Tkinter能夠在大多數的Unix平臺下使用,一樣能夠應用在Windows和Macintosh系統裏.Tk8.0的後續版本能夠實現本地窗口風格,並良好地運行在絕大多數平臺中。php

一、簡單實例

  下面的代碼是建立出一個窗口,其餘的操做就在這個平臺上進行。執行以後會在桌面彈出一個窗口,窗口的標題就是代碼中設置的win.title。這裏說一下,我使用的版本是python3.6。後面的內容儘可能按順序看,後面的控件也許用到前面寫到的東西。java

 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()

二、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()

三、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()

四、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()

五、點擊按鈕輸出輸入框中的內容

 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()

六、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()

七、帶滾動條的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()

八、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()

九、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()

十、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()

 十一、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()

十二、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()

1三、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()

1四、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()

1五、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()

1六、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()

1七、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()

1八、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()

1九、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()

2一、樹狀數據

 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()

2二、絕對佈局

 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()

2三、相對佈局

 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()

2四、表格佈局

 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()

2五、鼠標點擊事件

 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()

2六、鼠標移動事件

 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()

2七、鼠標釋放事件

 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()

2八、進入和離開事件

 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()

2九、響應全部按鍵的事件

 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()

3一、指定按鍵事件

 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()

3二、組合按鍵事件

 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()
相關文章
相關標籤/搜索