1. 程式人生 > 其它 >Python-tkinter開發學習 筆記

Python-tkinter開發學習 筆記

目錄:

目錄

課時一

GUI:使用者互動介面


kinter 介紹

是python自帶的gui庫,對圖形影象處理庫tk的封裝
自帶用著方便,跨平臺,夠用。
其他gui:pythonwin,wxpython,pyQT等等。

匯入tkinter 庫:import tkinter

查詢官方幫助:help(tkinter)

概念介紹

  1. 元件:組成介面的構成內容就是元件。按鈕,文字輸入框,滾動條,列表,選單等等。
  2. 視窗:一個軟體的矩形區域。

最簡單的介面

# 匯入模組
import tkinter 

# 建立主視窗物件
root = tkinter.T=Tk()  # 例項化主體,類

# 將主視窗加入訊息迴圈
root.mainloop()

實現簡單的模組

# 匯入模組
import tkinter 

# 建立主視窗物件
root = tkinter.Tk()  # 例項化主體,類

# 設定視窗的大小
root.minsize(300, 300)  # 設定視窗的最小大小為200*200px

# 加入一個按鈕的元件
# 先建立一個按鈕元件
btn = tkinter.Button(root, text = '這是按鈕的文字')  
# root 表示將這個按鈕放在哪裡 (只是在記憶體中建立了,並沒有擺放)

# 擺放按鈕(最簡單的)
btn.pack()

# 將主視窗加入訊息迴圈
root.mainloop()

元件的擺放方式

  1. pack()方式 --> 方位擺放方法(上下左右)(不推薦使用)
    a. 上(top),下(bottom),左(left),右(right)
  2. grid()方式 --> 網格擺放方法(網格座標)
    a. 把介面變成網格,對網格橫縱座標編號.告訴座標就可以把元件放在具體地方.
    b. 適合做格子類的東西,計算器 顏色選擇框等.
  3. place()方式 --> 定位擺放方法(具體畫素)
    a. 也有橫縱座標單位是畫素.告訴離上邊有多遠,離左邊有多遠 即可確定位置 .
    b. 適合軟體拖放的架構

pack()方式例子

# pack()方式:

import tkinter
root = tkinter.Tk()

---

# 建立元件
btn1 = tkinter.Button(root, text = '按鈕1')
btn1.pack(sidel = 'top')  # side表示放,後面值是上下左右,預設是top
# 如果是多個元件 上摞的 不好用.

# ipadx, ipady : 設定元件的內部間距.
btn1.pack(ipadx = 20, ipady = 20)  # 橫軸縱軸各增加20畫素的空間.

# padx, pady 表示距離左右上下元件的間距 單位也是px

# fill 填充
btn1.pack(fill = 'x')  # 水平方向的最大位置(一整行).
btn1.pack(fill = 'y')  # 垂直方向的最大位置(一整列)但是擺放方式必須是左和右.
btn.pack(fill = 

# expand 設定side是否失效.
btn1.pack(expand = 'yes')  # 按鈕會在中間,佔用了所有元件的空間

root.mainloop()

gird() 方式例子

# 網格沒有具體大小,取決於當前元件 最大元件的大小!
import tkinter

root = tkinter.Tk()
root.minsize(500, 500)

btn1 = tkinter.Button(root, text = '按鈕1')

btn1.grid() # 不設定,預設行列為0
btn1.grid(row = 0, column = 0) # 和上面一個意思

btn2 = tkinter.Button(root, text = '按鈕2')
btn2.grid(row = 1, column = 0) # 行1列0

btn3 = tkinter.Button(root, text = '按鈕3')
btn3.grid(row = 0, column = 1) # 行0列1
'''
如果想跨行跨列 有如下兩個引數:
rowspan: 設定跨行數量
cloumnspan: 設定跨列數量
'''
btn0 = tkinter.Button(root, text = '按鈕0')
btn0.grid(row = 2, column = 0, columnspan = 2, ipadx
          = 20) #要設定元件的大小
btnd = tkinter.Button(root, text = ' = ')
btnd.grid(row = 0, column = 2, rowspan = 2, ipady
          = 20)

root.mainloop()

place方式例子

# 兩組屬性,不可混合使用!!!
# 絕對定位佈局
import tkinter
root = tkinter.Tk()
root.minsize(500, 500)

btn1 = tkinter.Button(root, text = '按鈕1')
btn1.place(x = 100, y = 20, width = 50, height = 50) 
# 如果不設定元件位置會什麼也不出現,但不報錯,因為元件沒有定位所以顯示在看不到的地方了
# x:設定距離左上角的水平長度,y:設定距離左上角的垂直高度.
# width:設定元件所佔據的寬度,height:設定元件所佔的高度.
# 這種佈局方式拉動主視窗,所有的元件都不會動!因為是絕對定位佈局,設定多少就是多少!
# 這裡所有的單位都是畫素


# 相對定位佈局。
# 好處是可以隨介面變化而變化。
# relx:設定距離左上角的水平長度的百分比,rely:設定距離左上角的垂直高度的百分比.
# relwidth:設定元件所佔據的寬度的百分比,relheight:設定元件所佔的高度的百分比.
import tkinter
root = tkinter.Tk()
root.minsize(500, 500)

btn1 = tkinter.Button(root, text = '按鈕1')
btn1.place(relx = 0.2, rely = 0.1, relwidth = 0.1, relheight = 0.1) 
# relx:當前元件左邊佔整個寬度的百分比,高度同理。
# relwidth:設定當前寬度佔整體寬度的10%,高度同理。
# 以上設定都是相對於介面寬度和高度的百分比,可以根據介面的大小而改變(取值是0到1)

root.mainloop()

課時二

官方文件可以搜尋 python tkinter 去官網查詢.

基本(標準)屬性介紹

有tkinter.xxx 這個類的屬性,可以選擇,也可以自己寫引數.

外形尺寸

import tkinter
root = tkinter.Tk()
root.minsize(500, 500) # 所有屬性儘量只用預設畫素或者其他字元類的值.

btn1 = tkinter.Button(root, text = '尺寸')
btn1.pack(ipadx = 100, ipady = 200) # 尺寸的絕大部分尺寸的預設單位是畫素

root.mainloop()

座標系

btn1 = tkinter.Button(root, text = '座標系')
btn1.place(x = 100, y = 50) # 設定座標系.

顏色

btn1 = tkinter.Button(root, text = '顏色', bg = 'blue')  
# bg:按鈕的背景色.
# 可以使用顏色單詞
# 使用hex顏色模式(例子:#ff0000)(#紅色綠色藍色)(也就是十六進位制顏色)
btn1.pack()

字型屬性

btn1 = tkinter.Button(root, text = '字型', font = ('黑體',40,'bold','italic'))  
# 字型設定以元祖出現,分別是 字型,字號,黑體,斜體等等.
btn1.pack()

錨點

btn1 = tkinter.Button(root, text = '錨點', anchor = 'nw')
# 錨點就是方向的代名詞
# 按照上北下南左東右西 寫簡寫值就可以.

btn1.pack(ipadx = 20, iapdy = 20)

三維效果

btn1 = tkinter.Button(root, text = '三維效果', relief = 'ridge')
# 有幾種效果:flat, raised, sunken, groove, ridge
# relief關鍵字 = 值(字串)即可
# 也可以用 tkinter.FLAT 替代引數.
btn1.pack(ipadx = 20, iapdy = 20)

點陣圖

btn1 = tkinter.Button(root, text = '點陣圖', bitmap = 'error')
# 內建的點陣圖圖示庫 
# bitmap 屬性.
# error gray75 gray50 gray25 gray12 hourglass info guesthead question waring 
# 也可以使用自己的點陣圖檔案, .xbm(x點陣圖)格式的檔案都可以用,代替標準點陣圖名稱,使用字串@ 後跟.xbm檔案的路徑名.
btn1.pack(ipadx = 20, iapdy = 20)

滑鼠

# 用的比較少,可以自定義滑鼠的各種狀態,庫裡自帶,也可以去文件中查詢
btn1 = tkinter.Button(root, text = '滑鼠', cursor = 'heart')
btn1.pack(ipadx = 20, iapdy = 20)

# 如果要設定整個主視窗
root['cursor'] = 'start'

圖片

# 有兩種
# 第一種bmp格式和點陣圖意思一樣.很少用 略

# 第二種 PhotoImage類
# 支援.gif和.pgm和.ppm格式

# 將圖片設定為影象推向
long = tkinter.PhotoImage(file = 'long.gif')
btn1 = tkinter.Button(root, text = '圖片', image = long)
btn1.pack()

設定介面大小,幾何字串

imoprt tkinter
root = tkinter.Tk()
root.geometry('300x400')  # 幾何字串


常用元件

Frame 框架

功能:用來承載放置其他GUI元素,就是一個容器。用來進行區域劃分

# 外部的程式碼都是重複的省略
frame1 = tkinter.Frame(root, bg = 'black', width = 100, height = 200)
frame1.pack()
frame2 = tkinter.Frame(roott, bg = 'black' , width = 100, height = 200))
frame2.pack()
# 正常情況下是看不到這兩個容器的 因為容器是虛擬的,為了方便可以加一個背景顏色就看到了
# 設定背景顏色後 看到很小的兩個點 是因為虛擬容器的大小是根據它裡面的內容決定的
# 我們可以用width和height引數設定容器的大小.

# 下面展示如何在框架中放入內容
# 假設要擺放按鈕
btn1 = tkinter.Button(frame1, text = '按鈕1')
btn1.pack(side = 'left')
btn2 = tkinter.Button(frame1, text = '按鈕2')
btn2.pack(side = 'left')
btn3 = tkinter.Button(frame1, text = '按鈕3')
btn3.pack(side = 'left')
# 背景會根據元素的大小調整,所以背景被覆蓋了,可以在pack的時候用padx屬性設定邊框 就可以顯示出來了
# 放到框架2 裡面是一樣的效果
# 但是這樣依然不要用pack方式擺放東西!

Label 標籤

功能:用於顯示不可編輯的文字或圖示,就是介面上‘死’的東西(文字或圖片)

# 外部的程式碼都是重複的省略
label = tkinter.Label(root, text = '這是一個標籤')  # 擺放文字 各種通用屬性都可以用.但是一樣用的少.



Button 按鈕

功能:點選時執行一個動作

案例:

import tkinter 
root = tkinter.Tk()
root.geometry('300x300')  # 設定介面大小,用幾何字串設定

btn1 = tkinter.Button(root,)
# root: 表示放的父元件未知子
# bg: 背景色
# text: 文字內容
# fg: 前景色
# font: 字型 (元祖方式 看上面)
# command: 單擊按鈕時要呼叫的函式或方法.
# width 和 height 是使用4字元大小,不推薦用
# justify: 設定多行文字的對其方式.left right 等
# state: 狀態,按鈕能不能點! 用於控制!(active, disabled, normal)
# bd: 邊框粗細.單位畫素
# 其他去文件裡查
btn1.pack()

Entry 單行文字輸入框

# 外部的程式碼都是重複的省略
username = tkinter.Entry(root)
username.pack()
# 預設20個字元
# 可以自定義 用width屬性設定,注意單位是字元.
# 通用設定都是一樣的
# 如果用密碼要掩碼的話這樣寫
password = tkinter.Entry(root, show = '*')
# show屬性用來顯示你輸入的內容.做安全用

# Entry 可以用state狀態 控制是否可以輸入,或者展示用.'disabled'表示關閉

password.pack()

功能:顯示一行文字,可以輸入的單行文字

Text 多行文字

功能:顯示多行文字,可以輸入的多行文字

Checkbutton 複選框

功能:選擇框,允許使用者選擇或不選擇一個選項

import tkinter

root = tkinter.Tk()
root.geometry('500x500')

checkbutton = tkinter.Checkbutton(root,text = '要顯示的文字')  # text 文字是固定的可以這麼寫
checkbutton.pack()
# 如果字要改變
# 設定顯示內容tkinter變數
text = tkinter.StringVar() # 建立變數
text.set('同意此價格')  # 設定變數(設定用set,如果想要獲取用get)

result = tkinter.Intvar()
checkbutton = tkinter.Checkbutton(root,textvariable = text, variable = result, command = func)
checkbutton.pack()
# vaiable預設是整形,設定複選框勾選與否的值.
# 設定操作checkbutton的方法(也就是勾選後會出發的行為.)
def func():
    print(result.get)
#  如果要自定義勾選或者不勾選的值 可以加`onvalue`和`offalue`也就是說得勾選和勾選的值
result = tkinter.Intvar()
checkbutton.pack()
root.mainloop()

Radiobuution 單選框

功能:允許使用者從多個選項中選取一個,就是很多選項只能選擇一個(小圓點)。

Canvas 畫布

功能:提供繪圖功能,(直線,橢圓,多邊形,矩形)可以包含圖形或點陣圖。

import tkinter

root = tkinter.Tk()
root.geometry('500x500')
canvas = tkinter.Canvas(root, bg = 'white')  #新建一個畫布,把它放入主視窗中,並設定背景為白色.
canvas.pack()

# 在畫布中繪製一個長方形,用矩形工具
canvas.create_rectangle(20, 20, 100, 100, fill = 'red', outline = 'yellow')  
# 前面數字引數中,前d兩個引數表示開始矩形左上角點的位置(橫軸,縱軸),後面兩個引數表示矩形右下角的距離0軸(初始位置的)距離.
# fill 給畫出的模組填充顏色
# outline 邊框顏色
root.mainloop()

Listbox 列表框(盒子)

功能:一個選項列表,使用者可以從中選擇。同時展示多個數據.

# 外部的程式碼都是重複的省略
# 設定listbox的內容
names = ('呂洋', '任真', '呂恆一')
# 將上面資料轉換為tkinter的字串變數.
students = tkinter.StringVar(value = names)

listbox = tkinter.Listbox(root, listvariable = students)
listbox.pack()

功能:點下選單按鈕後彈出一個選項列表,使用者可以從中選擇。

# 1. 建立主選單
bigmenu = tkinter.Menu(root)

# 2. 建立子選單
filemenu = tkinter.Menu(bigmenu, , tearoff = 0))
# tearoff = 0 關閉選單飄出來的功能
# 子選單可以新增功能
filemenu.add_commadn(label = '開啟檔案', command = 一個函式)
filemenu.add_separator()  # 在選單中加入恆線的功能.
# 3. 將子選單加入主選單
bigmenu.add_cascade(label = '檔案', menu = filemenu)
# 4. 將主選單加入介面
root.config(menu)  # 在主選單裡配置一個主選單

功能:用來包含選單的元件(有下拉式,疊層式等等。)按鈕點選彈出選單欄.

# 重複的主視窗內容略
menbutton = tkinter.Menubutton(root, text = '選擇內容')
menubutton.pack()
# 先建立一個選單
menu = tkinter.Menu(menubuttion)
# 新增選項
# 設定變數
sex = tkinter.StringVar()
men.add_radiobutton(label = '男', variable = sex)
men.add_radiobutton(label = '男', variable = sex)

# 將選單配置到元件
menubutton.config(menu = menu)

OptionMenu 設定選單

功能:類似下拉列表的效果

# 重複框架內容略
# 建立一個變數用來接收結果
restult = tkinter.StringVar()
result.set('請選擇一個問題')  # 設定預設顯示的值
optionmenu - tkinter.OptionMenu(root, restult, '這是一個問題', '這是二個問題', '這是很多問題.')

Message 訊息框

功能:類似於標籤,單是可以顯示多行文字

Scale 進度條

功能:線性"滑塊"元件,可設定起始值和結束值,會顯示當前位置的精確值.

Scrollbar 滾動條

功能:對其支援的元件(文字域,畫布,列表框,文字框)提供滾動功能.

Toplevel 頂層元件

功能:類似框架為其他空間提供但單獨的容器.比如點設定新彈出來一個設定介面 就用到這個.

Spinbox 輸入空間

功能:與Entry類似,但是可以指定輸入範圍值.只能輸入指定型別的內容.(數字,小數,文字之類的.)

PanedWindow 窗口布局管理

功能:是一個窗口布局管理的外掛,可以包含一個或者多個子控制元件.

LabelFrame 容器控制元件

功能:是一個簡單的容器控制元件.常用用於複雜窗口布局,例如設定介面內容太多可以把相關內容的設定裝在一起.然後寫上說明.

# 外部的程式碼都是重複的省略
labelframe = tkinter.LabelFrame(root, text = '常規設定')
labelframe.pack()
# pack內可以用ipadx設定大小
# 也是虛擬框架 要把元件放進去才顯示.
btn1 = tkinter.Button(labelframe, text = '按鈕1')
btn1.pack()
btn2 = tkinter.Button(labelframe, text = '按鈕1')
btn2.pack()

messagebox 訊息框

功能:用於顯示你應用程式的訊息框.訊息框有很多種(訊息選擇框,檔案儲存框等),可以以後用的時候慢慢查詢.