給大家分享一篇 tkinter python(圖形開發(fā)界面)

Tkinter模塊("Tk 接口")是Python的標(biāo)準(zhǔn)Tk GUI工具包的接口.Tk和Tkinter可以在大多數(shù)的Unix平臺下使用,同樣可以應(yīng)用在Windows和Macintosh系統(tǒng)里.Tk8.0的后續(xù)版本可以實現(xiàn)本地窗口風(fēng)格,并良好地運(yùn)行在絕大多數(shù)平臺中。

目錄:

1、簡單實例
2、Label控件
3、Button控件
4、Entry控件
5、點擊按鈕輸出輸入框中的內(nèi)容
6、Text控件
7、帶滾動條的Text
8、Checkbutton多選框控件
9、Radiobutton單選框
10、Listbox控件一
11、Listbox控件二
12、Listbox控件三
13、Listbox四
14、Scale控件
15、Spinbox控件
16、Menu頂層菜單
17、Menu鼠標(biāo)右鍵菜單
18、Combobox下拉控件
19、Frame控件
20、表格數(shù)據(jù)
21、樹狀數(shù)據(jù)
22、絕對布局
23、相對布局
24、表格布局
25、鼠標(biāo)點擊事件
26、鼠標(biāo)移動事件
27、鼠標(biāo)釋放事件
28、進(jìn)入和離開事件
29、響應(yīng)所有按鍵的事件
30、響應(yīng)特殊按鍵事件
31、指定按鍵事件
32、組合按鍵事件

1、簡單實例

下面的代碼是創(chuàng)建出一個窗口,其他的操作就在這個平臺上進(jìn)行。執(zhí)行之后會在桌面彈出一個窗口,窗口的標(biāo)題就是代碼中設(shè)置的win.title。這里說一下,我使用的版本是python3.6。后面的內(nèi)容盡量按順序看,后面的控件也許用到前面寫到的東西。

 1 #!/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3 
 4 import tkinter
 5 
 6 
 7 # 創(chuàng)建主窗口
 8 win = tkinter.Tk()
 9 # 設(shè)置標(biāo)題
10 win.title("yudanqu")
11 # 設(shè)置大小和位置
12 win.geometry("400x400+200+50")
13 
14 # 進(jìn)入消息循環(huán),可以寫控件
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:標(biāo)簽控件,可以顯示文本
12 '''
13 # win:父窗體
14 # text:顯示的文本內(nèi)容
15 # bg:背景色
16 # fg:字體顏色
17 # font:字體
18 # wraplength:指定text文本中多寬之后換行
19 # justify:設(shè)置換行后的對齊方式
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 # 創(chuàng)建按鈕
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:輸入控件,用于顯示簡單的文本內(nèi)容
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 # 設(shè)置值
26 e.set("wewewewewewe")
27 # 取值
28 print(e.get())
29 print(entry2.get())
30 
31 win.mainloop()

5、點擊按鈕輸出輸入框中的內(nèi)容

 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     # 獲取輸入的內(nèi)容
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表示的是顯示的行數(shù)
14 text = tkinter.Text(win, width=30, height=10)
15 text.pack()
16 
17 str = '''蓋聞天地之?dāng)?shù),有十二萬九千六百歲為一元。將一元分為十二會,乃子、丑、寅、卯、辰、巳、午、未、申、酉、戌、亥之十二支也。每會該一萬八百歲。且就一日而論:子時得陽氣,而丑則雞鳴;寅不通光,而卯則日出;辰時食后,而巳則挨排;日午天中,而未則西蹉;申時晡而日落酉;戌黃昏而人定亥。譬于大數(shù),若到戌會之終,則天地昏蒙而萬物否矣。再去五千四百歲,交亥會之初,則當(dāng)黑暗,而兩間人物俱無矣,故曰混沌。又五千四百歲,亥會將終,貞下起元,近子之會,而復(fù)逐漸開明。邵康節(jié)曰:“冬至子之半,天心無改移。一陽初動處,萬物未生時。”到此,天始有根。再五千四百歲,正當(dāng)子會,輕清上騰,有日,有月,有星,有辰。日、月、星、辰,謂之四象。故曰,天開于子。又經(jīng)五千四百歲,子會將終,近丑之會,而逐漸堅實。易曰:“大哉乾元!至哉坤元!萬物資生,乃順承天?!敝链?,地始凝結(jié)。再五千四百歲,正當(dāng)丑會,重濁下凝,有水,有火,有山,有石,有土。水、火、山、石、土謂之五形。故曰,地辟于丑。又經(jīng)五千四百歲,丑會終而寅會之初,發(fā)生萬物。'''
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 # 創(chuàng)建滾動條
16 scroll = tkinter.Scrollbar()
17 
18 text = tkinter.Text(win, width=30, height=10)
19 # side放到窗體的哪一側(cè),  fill填充
20 scroll.pack(side=tkinter.RIGHT, fill=tkinter.Y)
21 text.pack(side=tkinter.LEFT, fill=tkinter.Y)
22 # 關(guān)聯(lián)
23 scroll.config(command=text.yview)
24 text.config(yscrollcommand=scroll.set)
25 
26 text.pack()
27 
28 str = '''蓋聞天地之?dāng)?shù),有十二萬九千六百歲為一元。將一元分為十二會,乃子、丑、寅、卯、辰、巳、午、未、申、酉、戌、亥之十二支也。每會該一萬八百歲。且就一日而論:子時得陽氣,而丑則雞鳴;寅不通光,而卯則日出;辰時食后,而巳則挨排;日午天中,而未則西蹉;申時晡而日落酉;戌黃昏而人定亥。譬于大數(shù),若到戌會之終,則天地昏蒙而萬物否矣。再去五千四百歲,交亥會之初,則當(dāng)黑暗,而兩間人物俱無矣,故曰混沌。又五千四百歲,亥會將終,貞下起元,近子之會,而復(fù)逐漸開明。邵康節(jié)曰:“冬至子之半,天心無改移。一陽初動處,萬物未生時。”到此,天始有根。再五千四百歲,正當(dāng)子會,輕清上騰,有日,有月,有星,有辰。日、月、星、辰,謂之四象。故曰,天開于子。又經(jīng)五千四百歲,子會將終,近丑之會,而逐漸堅實。易曰:“大哉乾元!至哉坤元!萬物資生,乃順承天?!敝链耍厥寄Y(jié)。再五千四百歲,正當(dāng)丑會,重濁下凝,有水,有火,有山,有石,有土。水、火、山、石、土謂之五形。故曰,地辟于丑。又經(jīng)五千四百歲,丑會終而寅會之初,發(fā)生萬物。'''
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中所有內(nèi)容
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 # 綁定變量,一組單選框要綁定同一個變量,就能區(qū)分出單選框了
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 # 創(chuàng)建一個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 # 將列表當(dāng)做一個元素添加
26 # lb.insert(tkinter.END, ["very good", "very nice"])
27 
28 # 刪除:參數(shù)1為開始的索引,參數(shù)2為結(jié)束的索引,如果不指定參數(shù)2,只刪除第一個索引處的內(nèi)容
29 lb.delete(1,3)
30 
31 # 選中:參數(shù)1為開始的索引,參數(shù)2為結(jié)束的索引,如果不指定參數(shù)2,只選中第一個索引處的內(nèi)容
32 lb.select_set(2,3)
33 
34 # 取消選中:參數(shù)1為開始的索引,參數(shù)2為結(jié)束的索引,如果不指定參數(shù)2,只取消第一個索引處的內(nèi)容
35 lb.select_clear(2)
36 
37 # 獲取到列表中的元素個數(shù)
38 print(lb.size())
39 # 獲取值
40 print(lb.get(2,3))
41 
42 # 返回當(dāng)前的索引項,不是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相似,但是不支持鼠標(biāo)按下后移動選中位置
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 # 打印當(dāng)前列表中的選型
19 print(lbv.get())
20 
21 # 設(shè)置選項
22 # lbv.set(("1","2","3"))
23 
24 # 綁定事件
25 def myprint(event):
26     # print(lb.curselection()) # 返回下標(biāo)
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 豎直(默認(rèn))
13 # length:水平時表示寬度,豎直時表示高度
14 # tickintervar :選擇值將會為該值得倍數(shù)
15 
16 scale1 = tkinter.Scale(win, from_=0, to=100, orient=tkinter.HORIZONTAL, tickinterval=10, length=200)
17 scale1.pack()
18 
19 # 設(shè)置值
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 數(shù)值范圍控件
 9 '''
10 
11 # 綁定變量
12 v = tkinter.StringVar()
13 
14 def updata():
15     print(v.get())
16 
17 # increment:步長,默認(rèn)為1
18 # values要輸入一個元組 最好不要和from和to同時使用,而且步長也沒用
19 # command 只要值改變就會執(zhí)行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 # 創(chuàng)建一個菜單選項
15 menu1 = tkinter.Menu(menubar, tearoff=False)
16 
17 # 給菜單選項添加內(nèi)容
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鼠標(biāo)右鍵菜單

 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 # 給菜單選項添加內(nèi)容
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 # 設(shè)置下拉數(shù)據(jù)
15 com["value"] = ("黑龍江", "吉林", "遼寧")
16 
17 # 設(shè)置默認(rèn)值
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 框架控件:在桌面上顯示一個矩形區(qū)域,多作為一個容器控件
 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、表格數(shù)據(jù)

 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 # 設(shè)置列,列還不顯示
15 tree.column("姓名", width=100)
16 tree.column("年齡", width=100)
17 tree.column("身高", width=100)
18 tree.column("體重", width=100)
19 
20 # 設(shè)置表頭
21 tree.heading("姓名", text="姓名-name")
22 tree.heading("年齡", text="年齡-age")
23 tree.heading("身高", text="身高-height")
24 tree.heading("體重", text="體重-weight")
25 
26 # 添加數(shù)據(jù)
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、樹狀數(shù)據(jù)

 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、鼠標(biāo)點擊事件

 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>  鼠標(biāo)左鍵
12 # <Button-2>  鼠標(biāo)滾輪
13 # <Button-1>  鼠標(biāo)右鍵
14 # <Double-Button-1>  鼠標(biāo)雙擊左鍵
15 # <Triple-Button-1>  鼠標(biāo)三擊左鍵
16 
17 button1 = tkinter.Button(win, text="leftmouse button")
18 # bind 給控件綁定數(shù)據(jù)(參數(shù)一是綁定的事件,參數(shù)二是觸發(fā)事件的函數(shù))
19 button1.bind("<Button-1>", func)
20 button1.pack()
21 
22 win.mainloop()

26、鼠標(biāo)移動事件

 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、鼠標(biāo)釋放事件

 1 import tkinter
 2 
 3 win = tkinter.Tk()
 4 win.title("yudanqu")
 5 win.geometry("400x400+200+50")
 6 
 7 # <ButtonRelease-1> 釋放鼠標(biāo)左鍵
 8 # <ButtonRelease-2> 釋放鼠標(biāo)中鍵
 9 # <ButtonRelease-3> 釋放鼠標(biāo)右鍵
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、進(jìn)入和離開事件

 1 import tkinter
 2 
 3 win = tkinter.Tk()
 4 win.title("yudanqu")
 5 win.geometry("400x400+200+50")
 6 
 7 # <Enter>  當(dāng)鼠標(biāo)進(jìn)入控件時觸發(fā)事件
 8 # <Leave>  當(dāng)鼠標(biāo)離開控件時觸發(fā)事件
 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、響應(yīng)所有按鍵的事件

 1 import tkinter
 2 
 3 win = tkinter.Tk()
 4 win.title("yudanqu")
 5 win.geometry("400x400+200+50")
 6 
 7 # <Key>  響應(yīng)所有的按鍵(要有焦點)
 8 
 9 label = tkinter.Label(win, text="*********", bg="red")
10 # 設(shè)置焦點
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、響應(yīng)特殊按鍵事件

 1 import tkinter
 2 
 3 win = tkinter.Tk()
 4 win.title("yudanqu")
 5 win.geometry("400x400+200+50")
 6 
 7 # <Shift_L>  只響應(yīng)左側(cè)的shift鍵
 8 # <Shift_R>
 9 # <F5>
10 # <Return>  也就是回車鍵
11 # <BackSpace>  返回,也就是退格鍵
12 
13 label = tkinter.Label(win, text="*********", bg="red")
14 # 設(shè)置焦點
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 # 設(shè)置焦點
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 # 設(shè)置焦點
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()

作者:漁單渠
出處:https://www.cnblogs.com/yudanqu/

進(jìn)群:834179111 免費領(lǐng)取Python的學(xué)習(xí)資料

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1、圖形化界面設(shè)計的基本理解當(dāng)前流行的計算機(jī)桌面應(yīng)用程序大多數(shù)為圖形化用戶界面(Graphic User Inte...
    IIronMan閱讀 260,049評論 15 244
  • 1、窗體 1、常用屬性 (1)Name屬性:用來獲取或設(shè)置窗體的名稱,在應(yīng)用程序中可通過Name屬性來引用窗體。 ...
    Moment__格調(diào)閱讀 4,784評論 0 11
  • Windows 常用消息大全 表A-1 Windows消息分布 消息范圍說 明 0 ~ WM_USER – 1系統(tǒng)...
    北風(fēng)知我意閱讀 2,245評論 0 0
  • 藍(lán)色就是我的生命,尊貴、典雅、孤獨 藍(lán)色亦是我表達(dá)愛的方式,深沉、含蓄 藍(lán)色像是一簾幽夢,幾許夢回,幾許醒 藍(lán)色滋...
    南妡淺月閱讀 797評論 0 1
  • 雪落無緒,梨花弄雨,美麗的相遇,春風(fēng)依依。淡淡的年華似水,流逝的思念,沒有誰不想走出愛的荊棘。 一段感情的濃濃蜜意...
    彼岸花的根閱讀 222評論 1 1

友情鏈接更多精彩內(nèi)容