tkinter



語法 作用
time = StringVar() 聲明字符串鈎子
time.set('1') 設置初始值
import tkinter as tk
from tkinter import messagebox
from tkinter import ttk

root = tk.Tk()
root.title('My root')
root.geometry('500x300')

def demo():
    pass

b1 = tk.Button(root, text='文本', font=('Arial', 12), width=10, height=1, command=demo)
b1.pack()

root.mainloop()

主窗口參數

語法 作用
root = tk.TK() 創建窗口
root['height'] = 300 設置高
root['width'] = 500 設置寬
root.title('魔方小站') 設置標題
root['bg'] = '#0099ff' 設置背景色
root.geometry("500x300+120+100") 設置窗口大小
root.option_add('*Font', 'Fira 10') 設置全局字體
root.resizable(width=False,height=True) | root.resizable(0,1) 禁止窗口調整大小
root.minsize(300,600) 窗口可調整的最小值
root.maxsize(600,1200) 窗口可調整的最大值
root.attributes("-toolwindow", 1) 工具欄樣式
root.attributes("-topmost", -1) 置頂窗口
root.state("zoomed") 窗口最大化
root.iconify() 窗口最小化
root.attributes("-alpha",1) 窗口透明化,透明度從 0-1,1 是不透明,0 是全透明
root.iconbitmap('c:\logo.ico') 設置左上角圖標
root.destroy() 關閉窗口
root.mainloop() 主窗口循環更新

窗口禁止關閉

def closeroot():
    messagebox.showerror(title='警告',message='沒錯你關不掉')
    return
root.protocol('WM_DELETE_root', closeroot)

正常退出

def closewindow():
    quit()
root.protocol("WM_DELETE_WINDOW", closewindow)

Label 標簽

語法 作用
l = tk.label(root,text = '文本',bg = '顏色',font = ('Arial',12),width = 30,height = 2) 創建標簽
l.pack() 顯示標簽

Button 按鈕

語法 作用
b = tk.Button(root, text='文本', font=('Arial', 12), width=10, height=1, command=函數名) 創建按鈕。
b.pack() 顯示按鈕。

Entry 輸入框

語法 作用
e1 = tk.Entry(root, show='*', font=('Arial', 14) 創建輸入框,密文顯示。
e1.pack() 放置輸入框
e2 = tk.Entry(root, show=None, font=('Arial', 14)) 創建輸入框,明文顯示。
e2.pack() 放置輸入框
e.get() 輸出輸入框中的內容,可以作為變量。

Text 文本框

語法 作用
text = tk.Text(root,height = 3) 創建文本框
text.pack() 放置文本框
text.insert('insert',文本) 在文本框鼠標標點處插入。
text.insert('end',文本) 在文本框末尾處插入。
text.mark_set('mark',1.0) 1.0 或 1.1 設置標記插入位置
text.insert('mark',文本) 在標記處插入
text.mark_gravity('mark',LEFT) 標記在右側插入

按鈕改變文本

foo = StringVar()
foo.set("開")
def demo():
    foo.set("關")
按鈕 = tk.Button(root,textvariable=foo,command=開始1)
按鈕.grid(row=5, column=0, padx=10, pady=5)

Listbox 窗口部件

列表框

語法 作用
self.lb.curselection() 提取點中選項的下標
self.lb.get(self.lb.curselection()) 提前點中選項下標的值

Radiobutton 窗口部件

單選框

Checkbutton 窗口部件

復選框

Scale 窗口部件

刻度條

Canvas 窗口部件

畫布

Menu 窗口部件

語法 作用
菜單欄 = tk.Menu(root) 創建一個菜單欄
菜單項 = tk.Menu(菜單欄, tearoff=0) 創建一個菜單項,默認不下拉。
菜單欄.add_cascade(label='菜單名', menu=菜單項) 空菜單命名
菜單項.add_command(label='子菜單名', command=函數名) 在菜單項中加入子菜單
菜單項.add_separator() 在菜單項中加入一條分割線
菜單項2 = tk.Menu(菜單欄, tearoff=0) 創建第二個菜單項,默認不下拉
菜單欄.add_cascade(label='菜單名', menu=菜單項2) 空菜單命名
菜單項2.add_command(label='子菜單名', command=函數名) 在菜單項中加入子菜單
二級菜單 = tk.Menu(菜單項) 創建二級菜單,即菜單項里面的菜單。
菜單項.add_cascade(label='菜單名', menu=二級菜單, underline=0) 在菜單項下面創建一個菜單項
二級菜單.add_command(label='菜單名', command=函數名) 創建第三級菜單命令
root.config(menu=菜單欄) 放置菜單欄

Combobox 下拉選擇

語法 作用
cv = tk.stringVar() 綁定變量
com = ttk.Combobox(root, textvariable=cv) 創建下拉框
com.pack() 放置下拉框
com["value"] = ('文本',文本') 設置下拉數據
com.current(索引) 設置默認值
demo = com.get() 變量接受值
com.bind("< >", 函數名) 下拉數據點擊調用函數

Frame 窗口部件

messageBox 彈窗

語法 作用
tk.messagebox.showwarning(title='窗口名', message='警告信息') 警告信息彈窗
tk.messagebox.showinfo('窗口名','提示信息') 提示信息彈窗
tk.messagebox.showerror('窗口名','錯誤信息') 錯誤信息彈窗
語法 返回值 作用
tk.messagebox.askokcancel('提示','要執行此操作嗎') True | False (疑問)確定取消對話框
tk.messagebox.askquestion('提示', '要執行此操作嗎') yes | no (疑問)是否對話框
tk.messagebox.askyesno('提示', '要執行此操作嗎') True | False (疑問)是否對話框
tk.messagebox.askretrycancel('提示', '要執行此操作嗎') True | False (警告)重試取消對話框
語法 返回值 作用
tk.filedialog.asksaveasfilename() 含后綴文件目錄 另存為窗口彈窗。
tk.filedialog.asksaveasfile() 文件流對象 另存為窗口彈窗,會創建文件。
tkinter.filedialog.askopenfilename() 含后綴文件目錄 打開文件彈窗。
tk.filedialog.askopenfile() 文件流對象 打開文件彈窗,
tk.filedialog.askdirectory() 目錄名 選擇文件彈窗
tk.filedialog.askopenfilenames() 元組 打開多個文件名
tk.filedialog.askopenfiles()# 列表 多個文件流對象

部件放置方式

放置方式 參數 作用
grid row = 0
colum = 0
padx = 0 單元格左右間距
pady = 0 單元格上下間距
ipadx = 0 單元格內部元素與單元格的左右間距
ipady = 0 單元格內部元素與單元格的上下間距
.grid(row = 0,column = 0,padx = 0,pady = 0,ipadx = 0,ipady = 0)
放置方式 參數 作用
pack side = 'top'
side = 'bottom'
side = 'left'
side = 'right'
.pack(side='top') 
放置方式 參數 作用
place x = 0 坐標 x
y = 0 坐標 y
anchor = 'nw' 錨定點
.place(x = 0,y = 0, anchor = 'nw')

滾動條

滾動條位置

self.slb.place(x=250, y=170,relwidth=0.05, relheight=0.3)

事件綁定

事件序列

  • type 部分的內容是最重要的,它通常用於描述普通的事件類型,例如鼠標點擊或鍵盤按鍵點擊。
  • modifier 部分的內容是可選的,它通常用於描述組合鍵,例如 Ctrl + c,Shift + 鼠標左鍵點擊。
  • detail 部分的內容是可選的,它通常用於描述具體的按鍵,例如 Button-1 表示鼠標左鍵。
事件序列 含義 序列
<Button-1> 用戶點擊鼠標左鍵 detail
<KeyPress-H> 用戶點擊 H 按鍵
<Control-Shift-KeyPress-H> 用戶同時點擊 Ctrl + Shift + H

type

type 含義
Activate 當組件的狀態從“未激活”變為“激活”的時候觸發該事件
Button 1. 當用戶點擊鼠標按鍵的時候觸發該事件 2. detail 部分指定具體哪個按鍵: 鼠標左鍵, 鼠標中鍵, 鼠標右鍵, 滾輪上滾(Linux), 滾輪下滾(Linux)
ButtonRelease 1. 當用戶釋放鼠標按鍵的時候觸發該事 2. 在大多數情況下,比 Button 要更好用,因為如果當用戶不小心按下鼠標,用戶可以將鼠標移出組件再釋放鼠標,從而避免不小心觸發事件
Configure 當組件的尺寸發生改變的時候觸發該事件
Deactivate 當組件的狀態從“激活”變為“未激活”的時候觸發該事件
Destroy 當組件被銷毀的時候觸發該事件
Enter 1. 當鼠標指針進入組件的時候觸發該事件 2. 注意:不是指用戶按下回車鍵
Expose 當窗口或組件的某部分不再被覆蓋的時候觸發該事件
FocusIn 1. 當組件獲得焦點的時候觸發該事件 2. 用戶可以用 Tab 鍵將焦點轉移到該組件上(需要該組件的 takefocus 選項為 True) 3. 你也可以調用 focus_set() 方法使該組件獲得焦點(見上方例子)
FocusOut 當組件失去焦點的時候觸發該事件
KeyPress 1. 當用戶按下鍵盤按鍵的時候觸發該事件 2. detail 可以指定具體的按鍵,例如 表示當大寫字母 H 被按下的時候觸發該事件 3. KeyPress 可以簡寫為 Key
KeyRelease 當用戶釋放鍵盤按鍵的時候觸發該事件
Leave 當鼠標指針離開組件的時候觸發該事件
Map 1. 當組件被映射的時候觸發該事件 2. 意思是在應用程序中顯示該組件的時候,例如調用 grid() 方法
Motion 當鼠標在組件內移動的整個過程均觸發該事件
MouseWheel 1. 當鼠標滾輪滾動的時候觸發該事件 2. 目前該事件僅支持 Windows 和 Mac 系統,Linux 系統請參考 Button
Unmap 1. 當組件被取消映射的時候觸發該事件 2. 意思是在應用程序中不再顯示該組件的時候,例如調用 grid_remove() 方法
Visibility 當應用程序至少有一部分在屏幕中是可見的時候觸發該事件

modifier

在事件序列中,modifier 部分的內容可以是以下這些:

modifier 含義
Alt 當按下 Alt 按鍵的時候
Any 1. 表示任何類型的按鍵被按下的時候 2. 例如 表示當用戶按下任何按鍵時觸發事件
Control 當按下 Ctrl 按鍵的時候
Double 1. 當后續兩個事件被連續觸發的時候 2. 例如 表示當用戶雙擊鼠標左鍵時觸發事件
Lock 當打開大寫字母鎖定鍵(CapsLock)的時候
Shift 當按下 Shift 按鍵的時候
Triple 跟 Double 類似,當后續三個事件被連續觸發的時候

Event 對象

當 Tkinter 去回調你定義的函數的時候,都會帶着 Event 對象(作為參數)去調用,Event 對象以下這些屬性你可以使用:

屬性 含義
widget 產生該事件的組件
x, y 當前的鼠標位置坐標(相對於窗口左上角,像素為單位)
x_root, y_root 當前的鼠標位置坐標(相對於屏幕左上角,像素為單位)
char 按鍵對應的字符(鍵盤事件專屬)
keysym 按鍵名,見下方 Key names(鍵盤事件專屬)
keycode 按鍵碼,見下方 Key names(鍵盤事件專屬)
num 按鈕數字(鼠標事件專屬)
width, height 組件的新尺寸(Configure 事件專屬)
type 該事件類型

Key names

當事件為 的時候,detail 可以通過設定具體的按鍵名(keysym)來篩選。例如 表示按下鍵盤上的大寫字母 H 時候觸發事件, 表示按下鍵盤上的 Tab 按鍵的時候觸發事件。

(下邊按鍵碼是對應美國標准 101 鍵盤的“Latin-1”字符集,鍵盤標准不同對應的按鍵碼不同,但按鍵名是一樣的)

按鍵名(keysym) 按鍵碼(keycode) 代表的按鍵
Alt_L 64 左邊的 Alt 按鍵
Alt_R 113 右邊的 Alt 按鍵
BackSpace 22 Backspace(退格)按鍵
Cancel 110 break 按鍵
Caps_Lock 66 CapsLock(大寫字母鎖定)按鍵
Control_L 37 左邊的 Ctrl 按鍵
Control_R 109 右邊的 Ctrl 按鍵
Delete 107 Delete 按鍵
Down 104 ↓ 按鍵
End 103 End 按鍵
Escape 9 Esc 按鍵
Execute 111 SysReq 按鍵
F1 67 F1 按鍵
F2 68 F2 按鍵
F3 69 F3 按鍵
F4 70 F4 按鍵
F5 71 F5 按鍵
F6 72 F6 按鍵
F7 73 F7 按鍵
F8 74 F8 按鍵
F9 75 F9 按鍵
F10 76 F10 按鍵
F11 77 F11 按鍵
F12 96 F12 按鍵
Home 97 Home 按鍵
Insert 106 Insert 按鍵
Left 100 ← 按鍵
Linefeed 54 Linefeed(Ctrl + J)
KP_0 90 小鍵盤數字 0
KP_1 87 小鍵盤數字 1
KP_2 88 小鍵盤數字 2
KP_3 89 小鍵盤數字 3
KP_4 83 小鍵盤數字 4
KP_5 84 小鍵盤數字 5
KP_6 85 小鍵盤數字 6
KP_7 79 小鍵盤數字 7
KP_8 80 小鍵盤數字 8
KP_9 81 小鍵盤數字 9
KP_Add 86 小鍵盤的 + 按鍵
KP_Begin 84 小鍵盤的中間按鍵(5)
KP_Decimal 91 小鍵盤的點按鍵(.)
KP_Delete 91 小鍵盤的刪除鍵
KP_Divide 112 小鍵盤的 / 按鍵
KP_Down 88 小鍵盤的 ↓ 按鍵
KP_End 87 小鍵盤的 End 按鍵
KP_Enter 108 小鍵盤的 Enter 按鍵
KP_Home 79 小鍵盤的 Home 按鍵
KP_Insert 90 小鍵盤的 Insert 按鍵
KP_Left 83 小鍵盤的 ← 按鍵
KP_Multiply 63 小鍵盤的 * 按鍵
KP_Next 89 小鍵盤的 PageDown 按鍵
KP_Prior 81 小鍵盤的 PageUp 按鍵
KP_Right 85 小鍵盤的 → 按鍵
KP_Subtract 82 小鍵盤的 - 按鍵
KP_Up 80 小鍵盤的 ↑ 按鍵
Next 105 PageDown 按鍵
Num_Lock 77 NumLock(數字鎖定)按鍵
Pause 110 Pause(暫停)按鍵
Print 111 PrintScrn(打印屏幕)按鍵
Prior 99 PageUp 按鍵
Return 36 Enter(回車)按鍵
Right 102 → 按鍵
Scroll_Lock 78 ScrollLock 按鍵
Shift_L 50 左邊的 Shift 按鍵
Shift_R 62 右邊的 Shift 按鍵
Tab 23 Tab(制表)按鍵
Up 98 ↑ 按鍵

捕獲鼠標點擊坐標

import tkinter as tk
root = tk.Tk()
def callback(event):
        print("點擊坐標:", event.x, event.y)
        
frame = tk.Frame(root, width = 200, height = 200)
frame.bind("<Button-1>", callback)
frame.pack()

root.mainloop()

獲取鍵盤事件

import tkinter as tk
root = tk.Tk()
def callback(event):
        print("點擊的鍵盤字符為:", event.char)

frame = tk.Frame(root, width = 200, height = 200)
frame.bind("<Key>", callback)
frame.focus_set()
frame.pack()
 
root.mainloop()

捕獲鼠標在組件上的運動軌跡

# 捕獲鼠標在組件上的運動軌跡
import tkinter as tk
root = tk.Tk()

def callback(event):
    print("當前坐標為:", event.x, event.y)

frame = tk.Frame(root, width=200, height=200)
frame.bind("<Motion>", callback)
frame.pack()

root.mainloop()

注意

1、控件和放置最好兩行代碼,不然有可能返回 None

2、控件事件函數需要兩個參數

3、導入模塊順序 tkinter 要在 PIL 前


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM