#Tkinter# Python GUI庫
“?文章所涉及內(nèi)容更多來自網(wǎng)絡(luò),在此聲明,并感謝知識的貢獻者!”
tkinter簡介—
tkinter簡介
tkinter(Tk interface)是Python的標(biāo)準(zhǔn)GUl庫,支持跨平臺的GUl程序開發(fā)。tkinter適合小型的GUl程序編寫,也特別適合初學(xué)者學(xué)習(xí)GUl編程。
—
tkinter官網(wǎng)https://docs.python.org/3/library/tkinter.html
ttk 子模塊的官方文檔:
https://docs.python.org/3.7/library/tkinter.ttk.html
tkinter布局
—
tkinter布局Tkinter 提供了布局功能,主要包含 pack、grid 和 place 三種布局方法。
pack 布局 方位布局
?



grid 布局法就是將屏幕切成表格的樣子,通過橫向坐標(biāo) row 和縱向坐標(biāo) column 來指定元素的位置。第一行標(biāo)記為 0,第一列也標(biāo)記為 0。



直接指定元素在父元素中的坐標(biāo)值,單位是像素。


—
tkinter的組件包含以下幾種
按鈕組件
Button?????????? 按鈕組件
RadioButton????? 單選框組件
CheckButton????? 選擇按鈕組件
Listbox????????? 列表框組件
tkinter.Button(用于存放的父組件,屬性參數(shù)...)
屬性:
anchor???????????? 設(shè)置按鈕中文字的對其方式,相對于按鈕的中心位置
background(bg)???? 設(shè)置按鈕的背景顏色
foreground(fg)???? 設(shè)置按鈕的前景色(文字的顏色)
borderwidth(bd)??? 設(shè)置按鈕邊框?qū)挾?br />cursor???????????? 設(shè)置鼠標(biāo)在按鈕上的樣式
command??????????? 設(shè)定按鈕點擊時觸發(fā)的函數(shù)
bitmap???????????? 設(shè)置按鈕上顯示的位圖
font?????????????? 設(shè)置按鈕上文本的字體
width????????????? 設(shè)置按鈕的寬度? (字符個數(shù))
height???????????? 設(shè)置按鈕的高度? (字符個數(shù))
state????????????? 設(shè)置按鈕的狀態(tài)
text?????????????? 設(shè)置按鈕上的文字
image????????????? 設(shè)置按鈕上的圖片
文本輸入框組件
Entry??????????? 單行文本框組件
Text???????????? 多行文本框組件
#單行文本
tkinter.Entry(用于存放的父組件,屬性參數(shù)...)
#多行文本
tkinter.Text(用于存放的父組件,屬性參數(shù)...)
屬性:
background(bg)??????? 設(shè)置文本框的背景色
foreground(bg)??????? 設(shè)置文本框的前景色
borderwidth(bd)?????? 設(shè)置文本輸入框的邊框
font????????????????? 設(shè)置文本框中的字體
width???????????????? 設(shè)置文本框的寬度(字符個數(shù))
height??????????????? 設(shè)置文本框的高度(字符個數(shù)),僅限于text
state???????????????? 設(shè)置文本框的狀態(tài)
selectbackground????? 選中文字時文本框的背景色
selectforeground????? 選中文字時文字的顏色
show????????????????? 指定文本框顯示的字符,若為*,則表示為密碼框
textvariable ???????? 設(shè)置文本對應(yīng)的變量,可以通過修改變量改變文字顯示。必須使用tkinter.IntVar() 或 tkinter.StringVar()產(chǎn)生的變量? entry可以使用
標(biāo)簽組件
Label??????????? 標(biāo)簽組件,可以顯示圖片和文字
Message????????? 標(biāo)簽組件,可以根據(jù)內(nèi)容將文字換行
tkinter.Label(用于存放的父組件,屬性參數(shù)...)
屬性
anchor??????????????? 設(shè)置文本相對于標(biāo)簽中心的位置
background??????????? 設(shè)置標(biāo)簽的背景色
foreground??????????? 設(shè)置標(biāo)簽的前景色
borderwidth?????????? 設(shè)置標(biāo)簽的邊框?qū)挾?br />width???????????????? 設(shè)置標(biāo)簽的寬度(字符個數(shù))
height??????????????? 設(shè)置標(biāo)簽的高度(字符個數(shù))
text????????????????? 設(shè)置標(biāo)簽中文本內(nèi)容
font????????????????? 設(shè)置標(biāo)簽中文字的字體類型
bitmap??????????????? 設(shè)置標(biāo)簽的現(xiàn)實的位圖
image???????????????? 設(shè)置標(biāo)簽中顯示的圖片
justify?????????????? 是設(shè)置標(biāo)簽中多行文本的對其方式
textvariable????????? 設(shè)置文本對應(yīng)的變量,可以通過修改變量改變文字顯示,必須使用tkinter.IntVar() 或者tkinter.StringVar()產(chǎn)生的變量
復(fù)合組件
thinter.Radiobutton(用于存放的父組件,屬性參數(shù)...)
thinter.Checkbutton(用于存放的父組件,屬性參數(shù)...)
屬性
anchor???????????? 設(shè)置組件中文字的對其方式
background(bg)???? 指定組件的背景色。?
borderwidth(bd)??? 指定組件邊框的寬度。?
bitmap ??????????? 指定組件中的位圖。?
font ????????????? 指定組件中文本的字體。?
foreground(fg)???? 指定組件的前
height ??????????? 指定組件的高度。?
image ???????????? 指定組件中的圖片。?
justify ?????????? 指定組件中多行文本的對齊方式。?
text ????????????? 指定組件中的文本,可以 使用“\ n” 表示換行。?
value????????????? 指定組件被選中后(單選框)
onvalue??????????? 組件勾選狀態(tài)值(復(fù)選框)
offvalue?????????? 組件取消勾選狀態(tài)的值(復(fù)選框)
variable ????????? 指定組件所關(guān)聯(lián)的變量。需要使用tkinter. IntVar()或者tkinter. StringVar()創(chuàng)建的值
width ???????????? 指定組件的寬度。
command??????????? 設(shè)置復(fù)選框操作的觸發(fā)命令(復(fù)選框)
菜單組件
Menu???????????? 菜單組件
MenuButton?????? 菜單按鈕組件,可以使用Menu代替
thinter.Menu(用于存放的父組件,屬性參數(shù)...)
background(bg)????????? 正常的背景顏色顯示在標(biāo)簽和指示器后面。
borderwidth(bd)???????? 指標(biāo)周圍邊界的大小。默認(rèn)值為2像素。
cursor ???????????????? 如果將此選項設(shè)置為光標(biāo)名稱(箭頭,點等),則鼠標(biāo)光標(biāo)將在檢查按鈕上方更改為該模式。
height ???????????????? 新框架的垂直尺寸。
highlightbackground ??? 當(dāng)框架沒有焦點時,焦點的顏色突出顯示。
highlightcolor ???????? 當(dāng)框架具有焦點時,焦點突出顯示的顏色。
highlightthickness ???? 焦點亮點的厚度。
relief ???????????????? 使用默認(rèn)值,relief = FLAT,檢查按鈕不會從背景中脫穎而出。您可以將此選項設(shè)置為任何其他樣式
width ????????????????? checkbutton的默認(rèn)寬度取決于所顯示的圖像或文字的大小。你可以設(shè)置此選項的字符數(shù)和checkbutton的,總是有許多字符的空間。
滾動條組件
scale??????????? 滑塊組件
Scrollbar??????? 滾動條組件
其他組件
Canvas?????????? 畫布組件
Frame??????????? 框架組件,將多個組件編組
Toplevel???????? 創(chuàng)建子窗口容器組件
tkinter事件
—
Tkinter事件鼠標(biāo)事件類型
<Button-1>????????? 按下了鼠標(biāo)左鍵??????? <ButtonPress-1>
<Button-2>????????? 按下了鼠標(biāo)中鍵??????? <ButtonPress-2>
<Button-3>????????? 按下了鼠標(biāo)右鍵??????? <ButtonPress-3>
<Enter>???????????? 鼠標(biāo)進入組件區(qū)域
<Leave>???????????? 鼠標(biāo)離開組件區(qū)域
<ButtonRelease-1>?? 釋放了鼠標(biāo)左鍵
<ButtonRelease-2>?? 釋放了鼠標(biāo)中鍵
<ButtonRelease-3>?? 釋放了鼠標(biāo)右鍵
<B1-Moion>????????? 按住鼠標(biāo)左鍵移動
<B2-Moion>????????? 按住鼠標(biāo)中鍵移動
<B3-Moion>????????? 按住鼠標(biāo)右鍵移動
<Double-Button-1>?? 雙擊鼠標(biāo)左鍵
<Double-Button-2>?? 雙擊鼠標(biāo)中鍵
<Double-Button-3>?? 雙擊鼠標(biāo)右鍵
<MouseWheel>??????? 滾動鼠標(biāo)滾輪
鍵盤事件類型
<KeyPress>???????????????? 表示任何鍵盤按下
<KeyPress-A>?????????????? 表示按下鍵盤A鍵??? A可以設(shè)置為其他的按鍵
<Alt-KeyPress-A>?????????? 表示同時按下Alt和A鍵??? A可以設(shè)置為其他的按鍵
<Control-KeyPress-A>?????? 表示同時按下Ctrl和A鍵??? A可以設(shè)置為其他的按鍵
<Shift-KeyPress-A>???????? 表示同時按下Shift和A鍵??? A可以設(shè)置為其他的按鍵
<Double-KeyPress-A>??????? 表示雙擊鍵盤A鍵??? A可以設(shè)置為其他的按鍵
<Lock-KeyPress-A>????????? 表示開啟大寫之后鍵盤A鍵??? A可以設(shè)置為其他的按鍵
<Alt-Control-KeyPress-A>?? 表示同時按下alt+Ctrl和A鍵??? A可以設(shè)置為其他的按鍵
注意:鍵盤事件除了entry和text組件其他組件的事件最好綁定在主界面上
事件對象中包含的信息
x,y????????????? 當(dāng)前觸發(fā)事件時鼠標(biāo)相對觸發(fā)事件的組件的坐標(biāo)值
x_root,y_root??? 當(dāng)前觸發(fā)事件時鼠標(biāo)相對于屏幕的坐標(biāo)值
char???????????? 獲取當(dāng)前鍵盤事件時按下的鍵對應(yīng)的字符
keycode????????? 獲取當(dāng)前鍵盤事件時按下的鍵對應(yīng)的的ascii碼
type???????????? 獲取事件的類型
num????????????? 獲取鼠標(biāo)按鍵類型? 123 左中右
widget?????????? 觸發(fā)事件的組件
width/height???? 組件改變之后的大小和configure()相關(guān)
窗口和組件相關(guān)事件類型
Activate???????? 當(dāng)中組件由不可以用變?yōu)榭捎脮r? 針對于state的變值
Deactivate?????? 當(dāng)組件由可用變?yōu)椴豢捎脮r觸發(fā)
Configure??????? 當(dāng)組件大小發(fā)生變化時觸發(fā)
Destory????????? 當(dāng)組件銷毀時觸發(fā)
FocusIn????????? 當(dāng)組件獲取焦點時觸發(fā) 針對于Entry和Text有效
Map????????????? 當(dāng)組件由隱藏變?yōu)轱@示時觸發(fā)
UnMap??????????? 當(dāng)組件由顯示變?yōu)殡[藏時觸發(fā)
Perproty???????? 當(dāng)窗口屬性發(fā)生變化時觸發(fā)
事件綁定函數(shù)
組件.bind(‘事件類型’,事件函數(shù))
為一個組件綁定一個操作
組件.bind_class(‘組件類型’,‘事件類型’,事件函數(shù))
為一類組件綁定一個操作
組件類型就是創(chuàng)建組件的方法名? 例如按鈕組件:Button
組件.bind_all(‘事件類型’,事件函數(shù))
為所有組件綁定一個操作(所有操作都會當(dāng)作對主界面的操作)
tkinter模塊
—
Tkinter模塊提供 Tk 支持的模塊包括:
tkinter
主 Tkinter 模塊。
tkinter.colorchooser
讓用戶選擇顏色的對話框。
tkinter.commondialog
本文其他模塊定義的對話框的基類。
tkinter.filedialog
允許用戶指定文件的通用對話框,用于打開或保存文件。
tkinter.font
幫助操作字體的工具。
tkinter.messagebox
訪問標(biāo)準(zhǔn)的 Tk 對話框。
tkinter.scrolledtext
內(nèi)置縱向滾動條的文本組件。
tkinter.simpledialog
基礎(chǔ)對話框和一些便捷功能。
tkinter.ttk
在 Tk 8.5 中引入的帶主題的控件集,提供了對應(yīng)于 tkinter 模塊中許多經(jīng)典控件的現(xiàn)代替代。
附加模塊:
_tkinter
一個包含低層級 Tcl/Tk 接口的二進制模塊。它會被主 tkinter 模塊自動導(dǎo)入,且永遠不應(yīng)被應(yīng)用程序員所直接使用。它通常是一個共享庫(或 DLL),但在某些情況下可能被動態(tài)鏈接到 Python 解釋器。
idlelib
Python 的集成開發(fā)與學(xué)習(xí)環(huán)境(IDLE)?;?tkinter。
tkinter.constants
當(dāng)向 Tkinter 調(diào)用傳入各種形參時可被用來代替字符串的符號常量。由主 tkinter 模塊自動導(dǎo)入。
tkinter.dnd
針對 tkinter 的(實驗性的)拖放支持。當(dāng)以 Tk DND 代替時它將會被棄用。
tkinter.tix
(已棄用)一個增加了部分新控件的較老的第三方 Tcl/Tk 包。對多數(shù)人來說可以在 tkinter.ttk 中找到更好的替代品。
turtle
Tk 窗口中的海龜繪圖庫。
tkinter案例
—
tkinter案例創(chuàng)建一個窗口
from tkinter import *
root = Tk()? # 實例化TK
root.mainloop()? # 進入事件循環(huán)

創(chuàng)建帶事件響應(yīng)的按鈕
from tkinter import *
from tkinter import messagebox
root = Tk()
bt = Button(root)
bt['text'] = '點我'
bt.pack()
def dianji(e):
??? messagebox.showinfo('message', 'give flower')? # 提示框
bt.bind('<Button-1>', dianji)? # 綁定點擊事件
root.mainloop()? # 進入事件循環(huán)

創(chuàng)建指定長寬高的窗口

from tkinter import messagebox
root = Tk()
root.title('我的gui程序')
root.geometry('500x300+100+200')
# 500寬度? 300高度?? 距屏幕左側(cè)100像素 頂部200像素
bt = Button(root)
bt['text'] = '點我'
bt.pack()
def dianji(e):
??? print(e)
??? messagebox.showinfo('message', 'give flower')? # 提示框
bt.bind('<Button-1>', dianji)? # 綁定點擊事件
root.mainloop()? # 進入事件循環(huán)
創(chuàng)建一個居中顯示的窗口
?
from tkinter import *
app = Tk()
app.title('拜液用戶管理')
sw = app.winfo_screenwidth()
# 得到屏幕寬度
sh = app.winfo_screenheight()
# 得到屏幕高度
ww = 610
wh = 400
x = (sw - ww) / 2
y = (sh - wh) / 2
app.geometry("%dx%d+%d+%d" % (ww, wh, x, y))
app.resizable(width=False, height=False)
app.mainloop()
參考資料
—
參考資料:https://blog.csdn.net/qq_60087163/article/details/129172486
https://blog.csdn.net/weixin_44634704/article/details/122571178
https://www.runoob.com/python/python-gui-tkinter.html
https://docs.python.org/zh-cn/3/library/tkinter.html
https://cloud.tencent.com/developer/article/2192326?areaSource=102001.14&traceId=nNG2EeN5txJPaCgbnzQ5p
http://www.imyhq.com/game/1207.html
評論
圖片
表情
