Tkinter 1. 基本介紹

介紹

Tkinter 是 Python 的標(biāo)準(zhǔn) GUI 庫(kù)。Python 使用 Tkinter 可以快速的創(chuàng)建 GUI 應(yīng)用程序。由于 Tkinter 是內(nèi)置到 Python 的安裝包中,所以只要安裝好 Python 之后就能使用了,無(wú)需另外安裝。Tkinter中的ttk對(duì)一些控件進(jìn)行了美化,說(shuō)是美化其實(shí)還是一樣丑,所以不會(huì)去介紹相同的,只會(huì)介紹一些新增的控件。


控件種類

tkinter 控件種類

  1. Button 按鈕
  2. Checkbutton 多選框按鈕
  3. Entry 輸入框
  4. Frame 框架
  5. Label 標(biāo)簽
  6. LabelFrame 標(biāo)簽框架
  7. Menu 菜單
  8. PanedWindow 分欄窗口
  9. Radiobutton 單選按鈕
  10. Scale 滑塊
  11. Scrollbar 滾動(dòng)條
  12. Spinbox 輸入框(指定數(shù)據(jù)范圍,類型的輸入框)
  13. Text 文本框
  14. Listbox 列表框
  15. Canvas 畫布

tkinter.ttk 控件種類(除了上面那些,還有下面這些新增的控件)

  1. Combobox 下拉列表
  2. Notebook 標(biāo)簽頁(yè)
  3. Progressbar 進(jìn)度條
  4. Treeview 樹狀瀏覽窗口
  5. Separator 分割線
  6. Sizegrip 拉伸窗口大小的按鈕

基本框架

import tkinter as tk

root = tk.Tk() # 主窗口對(duì)象

# 注意,下面的x不是乘號(hào)是小寫字母x
root.geometry('600x300+100+100')  # 設(shè)置窗口的大小,以及距離屏幕左上角x軸,y軸的距離。

root.title('test app') # 設(shè)置窗口的標(biāo)題

###### 添加控件,設(shè)置控件屬性,綁定回調(diào)函數(shù)

root.mainloop()


添加控件的基本流程

  1. 新建控件,通常第一個(gè)是master參數(shù),代表要把這個(gè)控件放在哪個(gè)控件上
  2. 在新建時(shí)可以往里面添加參數(shù),設(shè)置一些控件屬性,如:背景色,字體顏色,高,寬等,也可以在后期設(shè)置使用config方法修改/設(shè)置屬性。
  3. 把新建的控件放好,控件的布局用pack, place, grid

實(shí)例


root = tk.Tk()  # 主窗口
root.geometry('600x400+200+200')
tk.Label(root,    # 第一個(gè)參數(shù)就是master,表明要把這個(gè)控件放在master里面。
        textvariable=mystr,
        width=20,             # 設(shè)置屬性
        height=3,
        bg='#e33e31').pack() # pack布局該控件在主體中的位置。
root.mainloop()


控件與變量的關(guān)系

通過(guò)一些特定參數(shù),某些組件(如文本輸入組件)的當(dāng)前設(shè)置可直接與應(yīng)用程序的變量關(guān)聯(lián)。這些參數(shù)包括 variable 、 textvariable 、 onvalue 、 offvalue 、 value。這種關(guān)聯(lián)是雙向的:只要這些變量因任何原因發(fā)生變化,其關(guān)聯(lián)的部件就會(huì)更新以反映新的參數(shù)值。

現(xiàn)已經(jīng)定義了很多有用的 Variable 子類: StringVar 、 IntVar 、DoubleVar 和 BooleanVar。

  • 調(diào)用 get() 方法可以讀取變量的當(dāng)前值;
  • 調(diào)用 set() 方法則可改變變量值。

實(shí)例

簡(jiǎn)單的說(shuō),像textvariable這樣的參數(shù),它和變量mystr是雙向綁定的,所以對(duì)mystr設(shè)置了值,也相當(dāng)于對(duì)textvariable設(shè)置了值,從mystr獲得的值,也相當(dāng)于從textvariable獲得值。

import tkinter as tk


root = tk.Tk()
root.geometry('600x400')
mystr = tk.StringVar()
mystr.set('one')

lbl = tk.Label(root,textvariable=mystr)
lbl.pack()

def change():
    v = mystr.get()
    if v == 'one':
        mystr.set('two')
    elif v == 'two':
        mystr.set('one')

btn = tk.Button(root,text='Change',command=change)
btn.pack()

root.mainloop()

控件通用參數(shù)取值

控件中有很多參數(shù)功能都是一樣的,為了化繁為簡(jiǎn),把一些通用參數(shù)在這邊列出來(lái),后面就只提每個(gè)控件比較獨(dú)特的參數(shù)。

顏色相關(guān)的

  • background/bg 背景顏色
  • foreground/fg 前景色,字體顏色
  • activebackground 激活狀態(tài)的背景色(比如:點(diǎn)擊時(shí))
  • activeforeground 激活狀態(tài)的前景色
  • highlightbackground 框架frame沒有獲得焦點(diǎn)時(shí),邊框的顏色
  • highlightcolor 框架frame獲得焦點(diǎn)時(shí),邊框的顏色
  • highlightthickness 高亮邊框的寬度,默認(rèn)是0,所以當(dāng)你設(shè)置了上面兩項(xiàng),而沒有任何變化,說(shuō)明邊框?qū)挾?,你看不到,設(shè)置一個(gè)整數(shù),比如5,就可以看得到了。(使用tab鍵盤切換控件時(shí),控件外圍提示框的寬度,如下圖黑色邊框)
  • disabledforeground 控件state=disabled 時(shí)設(shè)置字體顏色
  • disabledbackground 控件state=disabled 時(shí)設(shè)置背景色

bd/borderwidth

邊框的寬度.

height / width

控件的高、寬

takefocus

用戶是否可以使用tab鍵移動(dòng)到這個(gè)部件,True or False

anchor 錨定點(diǎn)

"n" 、"ne" 、"e" 、"se" 、"s""sw" 、"w" 、"nw""center"

cursor 當(dāng)光標(biāo)進(jìn)入控件時(shí)的樣式

X_cursor
arrow
based_arrow_down
based_arrow_up
boat
bogosity
bottom_left_corner
bottom_right_corner
bottom_side
bottom_tee
box_spiral
center_ptr
circle
clock
coffee_mug
cross
cross_reverse
crosshair
diamond_cross
dot
dotbox
double_arrow
draft_large
draft_small
draped_box
exchange
fleur
gobbler
gumby
hand1
hand2
heart
icon
iron_cross
left_ptr
left_side
left_tee
leftbutton
ll_angle
lr_angle
man
middlebutton
mouse
none
pencil
pirate
plus
question_arrow
right_ptr
right_side
right_tee
rightbutton
rtl_logo
sailboat
sb_down_arrow
sb_h_double_arrow
sb_left_arrow
sb_right_arrow
sb_up_arrow
sb_v_double_arrow
shuttle
sizing
spider
spraycan
star
target
tcross
top_left_arrow
top_left_corner
top_right_corner
top_side
top_tee
trek
ul_angle
umbrella
ur_angle
watch
xterm

bitmap

內(nèi)置已命名的位圖有八個(gè):'error''gray25' 、'gray50''hourglass'、 'info' 、'questhead' 、'question' 、'warning' 。若要指定位圖的文件名,請(qǐng)給出完整路徑,前面加一個(gè) @,比如 "@/xxx/xxx.bit"。

image

指定要在小部件中顯示的圖像,使用 img = tkinter.PhotoImage(file='xxx.gif'),加載圖片

font

Tk 采用一串名稱的格式表示字體,例如 font=("Microsoft Yahei",20,'italic','bold') 。正數(shù)的字體大小以點(diǎn)為單位,負(fù)數(shù)的大小以像素為單位。

justify對(duì)齊方式

"left" 、 "center" 、 "right""fill" 。

distance

屏幕距離可以用像素或絕對(duì)距離來(lái)指定。像素是數(shù)字,絕對(duì)距離是字符串,后面的字符表示單位:c 是厘米,i 是英寸,m 是毫米,p 則表示打印機(jī)的點(diǎn)數(shù)。例如,3.5 英寸可表示為 "3.5i"。

relief

決定了組件的邊框樣式。 合法值包括:"raised""sunken" 、"flat""groove""ridge" 。

scrollcommand

xscrollcommandyscrollcommand 分別是給控件設(shè)置水平滾動(dòng)條和垂直滾動(dòng)條,使用scrollbar.set設(shè)置滾動(dòng)條

wrap

一個(gè)單詞還沒有輸入完就要換行了。如果設(shè)置成char沒輸入完的部分會(huì)另起一行,如果設(shè)置成word就會(huì)整個(gè)單詞跳到下一行。(只能是以下值之一:"none" 、 "char" 、 "word"。)

wraplength

設(shè)置每行都最大長(zhǎng)度

state

控件的狀態(tài): active, disabled, or normal

padx,pady

在控件里面設(shè)置代表添加內(nèi)邊距
在pack()、grid()里面設(shè)置代表添加外邊距

compound

圖片和文字的排布方式;none, bottom, top, left, right, center,如果選擇top,圖片就會(huì)在文字上方。

underline

下劃線,underline=0代表在第一個(gè)字符下添加下劃線。


控件的布局方式

place()

在一個(gè)坐標(biāo)位置上放置控件
參數(shù):
x
y
anchor (錨定點(diǎn): n, ne, e, se, s, sw, w, nw, or center)

grid()

用行列的形式來(lái)布局控件
參數(shù)
row 第幾行
rowspan 跨多少行
column 第幾列
columnspan 跨多少列
ipadx - 水平內(nèi)邊距
ipady - 垂直內(nèi)邊距
padx - 水平外邊距
pady - 垂直外邊距
sticky(在單元格里面的位置:'n', 's', 'w', 'e', )

pack()

參數(shù)

        anchor (錨定點(diǎn): n, ne, e, se, s, sw, w, nw, or center)
        expand=bool - 是否隨著父控件拉伸而拉伸
        fill=NONE or X (填充滿水平方向)
                         or Y (填充滿垂直方向)
                         or BOTH(填充滿水平和垂直方向)
        ipadx - 水平內(nèi)邊距
        ipady - 垂直內(nèi)邊距
        padx - 水平外邊距       
        pady - 垂直外邊距
        side=TOP or BOTTOM or LEFT or RIGHT - 放置的位置

Toplevel

tkinter中的窗口是一個(gè)隱含的對(duì)象,最低一層實(shí)際上是Toplevel,構(gòu)建窗口就是實(shí)例化一個(gè)Toplevel控件。

Toplevel可設(shè)置的

項(xiàng)目 說(shuō)明
title(str) 設(shè)置窗口的標(biāo)題
iconbitmap(ico_path) 設(shè)置窗口的圖標(biāo),不知道為什么window可以設(shè)置,Mac不行,推薦ico x32的尺寸
geometry(str) 設(shè)置窗口的大小,以及距離左上角的x軸,y軸距離
maxsize(width=None, height=None) 設(shè)置窗口的最大尺寸
minsize(width=None, height=None) 設(shè)置窗口的最小尺寸
resizable(width=None, height=None) 設(shè)置窗口的可拉伸尺寸,當(dāng)都等于0,表示禁止拉伸
attributes('-alpha',1.0) 設(shè)置窗口的透明度,取值再0-1之間,還有其他可設(shè)置,但是window和Mac之間不通用,不說(shuō)了。
configure(屬性) 配置窗口的一些屬性,下面表格中列出
mainloop() 主循環(huán),執(zhí)行則相當(dāng)于啟動(dòng)窗口,必要

configure可設(shè)置的屬性

屬性 說(shuō)明
bd/borderwidth 邊框?qū)?默認(rèn)是0,當(dāng)你設(shè)置了邊框?qū)?,如果relief是flat,你是看不出變化的
menu 設(shè)置菜單Menu對(duì)象
relief 邊框樣式,可選的FLAT,SUNKEN,RAISED,GROOVE,RIDGE默認(rèn)為FLAT
background/bg 背景色,'#1BA135'這樣的RGB
colormap 設(shè)置需要是Colormap的實(shí)例,
container 設(shè)置需要是Container的實(shí)例
cursor 鼠標(biāo)光標(biāo)在其中的位置
height 高度
width 寬度
highlightbackground 要高亮的背景色
highlightcolor 要高亮的顏色
highlightthickness 高亮的寬度
padx 水平padding 內(nèi)邊距
pady 垂直padding 內(nèi)邊距
takefocus 指示用戶可以使用tab鍵移動(dòng)到這個(gè)部件

relief效果圖

實(shí)例

import tkinter as tk
import sys
import os


ui_dir = os.path.dirname(os.path.realpath(sys.argv[0]))
ico_path = os.path.join(ui_dir,'ico/logox32.ico')



root = tk.Tk()

# 注意,下面的x不是乘號(hào)是小寫字母x
root.geometry('600x300+100+100')  # 設(shè)置窗口的大小,以及距離屏幕左上角x軸,y軸的距離。
root.iconbitmap(ico_path)
root.maxsize(width=600,height=300)
root.minsize(width=500,height=200)
root.configure(borderwidth=50,bg='#1BA135',relief='sunken')


root.title('test app') # 設(shè)置窗口的標(biāo)題

root.mainloop()

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

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