python|tkinter組件從0到1學習(含實例操作)

GUI概述

GUI是圖形用戶界面

tkinter圖形化庫簡介

tkinter是python一個圖形庫,我們先嚐試做一個簡單的案例,打開圖形用戶界面tkinter

例子:打開圖形用戶界面

如果大家連這個包都沒有的話,用pycharm裝好或者cmd裏輸入

pip install tkinter

下面我們繼續做,在test.py裏輸入這三行命令。

# -*- coding:utf-8 -*-
import tkinter # 導入模塊
root = tkinter.Tk() # 生成root主窗口
root.mainloop() # 生成消息循環
  • 頭就是一個編碼規範-utf-8,
  • 導入模塊
  • 生成主窗口
  • 讓主窗口消息循環,簡單地說,讓我們看見別閃退
    在這裏插入圖片描述

例子:嘗試添加label和button進去

大家學過vb或者安卓編程就更優秀了,它們都是面向對象編程。學會拖控件進去,而python也是同理,只不過python更偏向於命令行,將一個控件顯示出來需要兩步

  • 讓類生出一個控件出來
  • 讓控件放到主窗口中

就這兩步原理十分簡單:

# -*- coding:utf-8 -*-
import tkinter # 導入模塊
root = tkinter.Tk() # 生成root主窗口
label = tkinter.Label(root, text="Hello,tkinter") # 生成標籤
label.pack() #將標籤添加到root窗口中
button1 = tkinter.Button(root, text="左邊按鈕") # 生成button1
button1.pack(side=tkinter.LEFT) # 將button1添加到root主窗口中
button2 = tkinter.Button(root, text="右邊按鈕") # 生成button2
button2.pack(side=tkinter.RIGHT) # 將button2添加到root主窗口中

root.mainloop() # 生成消息循環

在這裏插入圖片描述

tkinter組件

下面如果要diy出更優秀的圖形效果就需要組件的學習,下面開始!

組件分類

共14個

組件名稱 組件功能
Button 按鈕
Canvas 繪圖行組件,可以在其中繪製圖形
Checkbutton 複選框
Entry 文本框(單行)
Frame 框架,將幾個組件組成一組
Label 標籤,可以顯示文字或者圖片
Listbox 列表框
Menu 菜單
Message 與Label組件類似,但是可以根據自身大小將文本換行
Radiobutton 單選框
Scale 滑塊
Scrollbar 滑動條
Text 文本框(多行)
Toplevel 用來創建子窗口容器組件

佈局組件

當我們手裏生了很多控件之後,如何DIY擺放這是一個大問題。下面我們一起學習擺放的一些種類。牢記本小節一共三種擺放方式。熟練一種,其餘瞭解

pack方法

就是我們在例子二用的方法。

  • after:將組件置於其他組件之後
  • anchor:組件的對齊方式,頂對齊"n",底"s"左“w”右“e”(用英文中的方位詞去記憶)
  • before:將組件置於其他組件之前

grid方法

  • column:組件所在的列起式位置
  • columnspam:組件的列寬
  • row:組件所在的行起式位置
  • rowspam:組件的行寬

place方法

參數名 作用
anchor 組件對齊方式
x 組件左上角的x座標
y 組件左上角的y座標
relx 組件相對於窗口的x座標,應爲0~1之間的小數
rely 組件相對於窗口的y座標,應爲0~1之間的小數
width 組件的寬度
height 組件的高度
relwidth 組件相對於窗口的寬度,應爲0~1之間的小數
relheight 組件相對於窗口的高度,應爲0~1之間的小數

常用tkinter組件

上面的方法講完了,按照正常的情況下,我們已經可以佈局出自己想要的方式了,但是俗話要想讓他們動起來還需要懂得這些知識。知道這些知識可以幹嘛呢?就是你在寫回調函數和設置顏色設置樣式的時候得心應手。畢竟上面的學習只是簡單的把佈局佈置好,而真正的精華卻在下面!一起努力!

按鈕

說到按鈕,大家經常點的東西,在vb中當然可以設置很多樣式,python也可以。下面是他的一些參數表

參數名 作用
anchor 指定按鈕上文本的位置
background(bg) 指定按鈕的背景色
bitmap 指定按鈕上顯示的位圖
borderwidth(bd) 指定按鈕邊框的寬度
command 指定按鈕的回調函數
cursor 指定鼠標移動到按鈕上的指針樣式
font 指定按鈕上文本的字體
foreground(fg) 指定按鈕的前景色
height 指定按鈕的高度
image 指定按鈕上顯示的圖片
state 指定按鈕的狀態
text 指定按鈕的文字
width 指定按鈕的寬度

當大家覺得博主又在難爲人的時候,發現我爲什麼要記這種東西,其實也壓根不用記,只需要你將問題轉換爲你口中的語言,問題已經將要被解決了。比如:

  • 問一下,我怎麼設置按鈕字體微軟雅黑
  • 怎麼設置按鈕的文字呀
  • 怎麼將按鈕的寬度改改呀
  • 等等不勝枚舉

將問題描述出來,就很快得到解決。

例子:測試按鈕不同狀態

看完這個例子會發現按鈕原來是這樣子玩的:

實驗效果

在這裏插入圖片描述

實驗代碼

牢記三個步驟開啓圖形GUI

# -*- coding:utf-8 -*-
import tkinter # 導入模塊
root = tkinter.Tk() # 生成root主窗口

botton1 = tkinter.Button(root,anchor=tkinter.E, text='我是按鈕1', width = 40, height = 5)
botton1.pack()
botton2 = tkinter.Button(root,anchor=tkinter.E, text='我是按鈕2', bg='red')
botton2.pack()
botton3 = tkinter.Button(root,anchor=tkinter.E, text='我是按鈕3', width = 14, height = 1)
botton3.pack()
botton4 = tkinter.Button(root,anchor=tkinter.E, text='我是按鈕4', width = 60, height = 5, state=tkinter.DISABLED)
botton4.pack()




root.mainloop() # 生成消息循環

文本框

講完按鈕我們處理一下文本框,文本框我們在首文,沒用到喲!因此他的設置主要分爲兩種,一種是單行,另外一種是多行。

  tkinter.Text  # 多行設置
  tkinter.Entry  # 單行設置
參數名 作用
background(bg) 指定文本框的背景色
borderwidth(bd) 指定文本框邊框的寬度
font 指定文本框中文字的字體
forground(fg) 指定文本框的前景色
selectbackground 指定選定文本的背景色
selectforeground 指定選定文本的前景色
show 指定文本框顯示的字符,若爲“*” ,表示文本框爲密碼框
state 指定文本框的狀態
width 指定文本框的寬度

這當然也要附上例子喲

例子:嘗試用表格中的屬性設置文本框

實驗效果

在這裏插入圖片描述

實驗代碼

在這裏插入圖片描述

標籤

標籤相當於vb中的label就是相當於提醒用戶的一個只能看得玩意,有了它界面更加友好。python中除了顯示文本當然可以顯示圖片。在看到上面的兩個參數表格中,再去看這個會發現一些都是重複,可謂是記住一個,拓展記憶就行了。

參數名 作用
anchor 指定標籤中文本的位置
background(bg) 指定標籤的背景色
borderwidth(bd) 指定標籤的邊框寬度
bitmap 指定標籤的位圖
font 指定標籤中文字的字體
forground(fg) 指定標籤的前景色
height 指定標籤的高度
image 指定標籤中的圖片
justify 指定標籤中多行文本的對齊方式
text 指定標籤中的文本,可以使用“\n” 表示換行
width 指定標籤的寬度

例子:嘗試用標籤組件完成實驗效果的圖片

實驗效果

在這裏插入圖片描述

實驗代碼
# -*- coding:utf-8 -*-
import tkinter # 導入模塊
root = tkinter.Tk() # 生成root主窗口

label1 = tkinter.Label(root,anchor=tkinter.E, bg = 'blue',fg = 'red',text='我是標籤1',width=30,height=5)
label1.pack()
label2 = tkinter.Label(root,text='我是標籤2',justify=tkinter.LEFT,width=30,height=5)
label2.pack()
label3 = tkinter.Label(root,text='我是標籤3',justify=tkinter.RIGHT, width=30,height=5)
label3.pack()
label4 = tkinter.Label(root,text='我是標籤4',justify=tkinter.CENTER, width=30,height=5)
label4.pack()





root.mainloop() # 生成消息循環

菜單

我們用pycharm編程的時候,經常調整字體大小、創建項目、創建文件等等。那些都是菜單的功能。大家仔細想象我們用的菜單功能無非是一些最基本的操作。那tkinter其實也有。大家可以看下面的效果

例子:實現添加菜單的主窗口

實驗效果

在這裏插入圖片描述

實驗代碼

爲了便於理解,加上了註釋,其實佈局這種東西,懂得了安卓一丟丟,python gui也並不難

# -*- coding:utf-8 -*-
import tkinter # 導入模塊
root = tkinter.Tk() # 生成root主窗口


menu = tkinter.Menu(root)  # 生成菜單
# 製作菜單一
submenu = tkinter.Menu(menu,tearoff = 0)
submenu.add_command(label='Open')
submenu.add_command(label='Save')
submenu.add_command(label='Close')
menu.add_cascade(label='File',menu=submenu)
submenu = tkinter.Menu(menu,tearoff = 0)
# 製作菜單2
submenu.add_command(label='Copy')
submenu.add_command(label='Paste')
submenu.add_separator()
submenu.add_command(label = 'Cut')
menu.add_cascade(label='Edit',menu=submenu)
submenu = tkinter.Menu(menu,tearoff = 0)
submenu.add_command(label='About')
# 製作菜單3--幫助
menu.add_cascade(label='Help',menu=submenu)
root.config(menu=menu)

root.mainloop() # 生成消息循環

單選框和複選框

單選框在安卓中非常重要,在python中用tkinter.Radiobutton和tkinter.Checkbutton.學習html的時候單選框也同意設置成一個name,才能實現互斥。這裏也一樣,通過表格再次深化一下吧!

參數名 作用
anchor 指定文本的位置
background(bg) 指定背景色
borderwidth(bd) 指定邊框寬度
bitmap 指定組件中的位圖
font 指定文字的字體
forground(fg) 指定前景色
height 指定高度
image 指定圖片
justify 指定多行文本的對齊方式
text 指定標籤中的文本,可以使用“\n” 表示換行
value 指定組件被選中關聯的變量
variable 指定組件所關聯的變量
width 指定寬度

大家通過表格要學會發現,value和varible是精華,是單選框和複選框的精華爲了更加便於理解,來一個例子

例子:單選框和複選框樣式簡單學習

實驗效果

在這裏插入圖片描述

實驗代碼

生一個,上牆。可以這麼理解代碼的執行

# -*- coding:utf-8 -*-
import tkinter # 導入模塊
root = tkinter.Tk() # 生成root主窗口
# 單選框佈局
r = tkinter.StringVar()
r.set('1')
radio = tkinter.Radiobutton(root,variable = r,value  = '1',text='我是男生')
radio.pack()
radio = tkinter.Radiobutton(root,variable = r,value  = '2',text='我是女生')
radio.pack()
radio = tkinter.Radiobutton(root,variable = r,value='3',indicatoron=0,text='另類單選框1')
radio.pack()
radio = tkinter.Radiobutton(root,variable = r,value='4',indicatoron=0,text='另類單選框2')
radio.pack()
# 複選框佈局
c = tkinter.IntVar()
c.set(1)
check = tkinter.Checkbutton(root,text='我是一個複選框',variable = c,onvalue = 1,offvalue = 2)
check.pack()
check = tkinter.Checkbutton(root,text='另類複選框1',variable = c,indicatoron = 0,onvalue = 1,offvalue = 2)
check.pack()
root.mainloop() # 生成消息循環
print(r.get())
print(c.get())

繪製圖形

既然有了海龜繪圖,那就再來個canvas繪圖也無妨。藝術在於創作呀!

參數名 作用
background(bg) 指定背景色
borderwidth(bd) 指定邊框寬度
bitmap 指定組件中的位圖
forground(fg) 指定前景色
height 指定高度
image 指定圖片
width 指定寬度

下面一些方法的學習可以畫出精準的圖形,堪比博主的matlab

方法名 功能
create_arc 繪製圓弧
create_bitmap 繪製位圖,支持XBM
create_image 繪製圖片,支持GIF
create_line 繪直線
create_oval 繪製橢圓
create_polygon 繪製多邊形
create_rectangle 繪製矩形
create_text 繪製文字
create_window 繪製窗口
delete 刪除繪製圖形

例子:嘗試繪製實驗效果的圖形

看完那麼多的方法,自己也可以試試

實驗圖片

另存爲hm.gif.大家應該能理解
在這裏插入圖片描述

實驗效果

在這裏插入圖片描述

響應操作事件

佈局布的差不多,可以寫回調函數了。太激動了

事件基礎

事件一共分爲三種。鍵盤、鼠標加窗口
事件綁定分三種,綁定單個、綁定所有、綁定類

綁定單個:bind(sequence,func,add)
綁定類: bind_class(className,sequence,func,add)
綁定所有組件:bind_all(sequence,func,add)
各參數如下:
sequence:所綁定的事件,必須以<>包圍的字符串
func:所綁定的事件處理函數
add:可選參數,爲空字符或者'+'
className:所綁定的類

通過綁定的三個原型會發現,最難處理的sequence。因此下面學習一下sequence處理的事件及其意義

鼠標事件及其意義

這裏的鼠標數字可以切換,鼠標的方式可以切換。學會靈活自由搭配
在這裏插入圖片描述

鍵盤事件及其意義

在這裏插入圖片描述

窗口事件及其意義

在這裏插入圖片描述

響應事件

窗口中的事件被綁定到函數後,當該事件被觸發後將調用所綁定的函數進行處理,事件觸發後,系統將向該函數傳遞一個event對象的參數。因此函數格式如下:

def function(event):
	<語句>
屬性 意義
char 按鍵字符,僅對鍵盤事件有效
keycode 按鍵名,僅對鍵盤事件有效
keysym 按鍵編碼,僅對鍵盤事件有效
num 鼠標按鍵,僅對鼠標事件有效
type 所觸發的事件類型
widget 引起事件的組件
width,height 引起事件的組件
x,y 鼠標當前位置,相對於窗口
x_root,y_root 鼠標當前位置,相對於整個屏幕
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章