Python?tkinter控件樣式詳解
以按鈕為例
tkinter對(duì)控件的諸多屬性提供了可定制的功能,下面以最常用的按鈕作為示例,集中展示其樣式特點(diǎn),而后再詳細(xì)給出每種樣式所支持的部件類(lèi)型。

這里面并不涉及到諸如寬度width,高度height,以及調(diào)控與其他部件最小間隔的padx, pady,而只專(zhuān)注于能夠體現(xiàn)“樣式”的屬性。
其繪制代碼如下,整體采用pack布局,每一組風(fēng)格均放在一個(gè)Frame中,每個(gè)Frame都有一個(gè)Label和圖像一一對(duì)應(yīng),然后所有Frame縱向排布下去。
import tkinter as tk
import tkinter.ttk as ttk
root = tk.Tk()
# 用于設(shè)置frame
def setFrame(root, text):
frm = tk.LabelFrame(root)
frm.pack(side=tk.TOP, fill=tk.X, expand=tk.YES)
ttk.Label(frm, text=text, width=10).pack(side=tk.LEFT)
return frm
pack = dict(side=tk.LEFT, padx=5)
frm = setFrame(root, "按鈕狀態(tài)")
status = {"禁用狀態(tài)":tk.DISABLED, "普通狀態(tài)":tk.NORMAL, "活躍狀態(tài)":tk.ACTIVE}
for i, key in enumerate(status, 2):
tk.Button(frm, text=key, state=status[key]).pack(**pack)
frm = setFrame(root, '按鈕顏色')
tk.Button(frm, text='背景色', bg='blue').pack(**pack)
tk.Button(frm, text='前景色', fg='blue').pack(**pack)
tk.Button(frm, text='鼠標(biāo)點(diǎn)擊改變背景',
activebackground='blue').pack(**pack)
tk.Button(frm, text='鼠標(biāo)點(diǎn)擊改變前景',
activeforeground='blue').pack(**pack)
frm = setFrame(root, '邊框尺寸')
for i in [1,3,5,7,9]:
tk.Button(frm, text=f'邊寬{i}', bd=i).pack(**pack)
frm = setFrame(root, '按鈕字體')
fontDct = {'軟體雅黑/12/重打印': ('軟體雅黑', 10, 'overstrike'),
'宋體/12/斜體' : ('宋體', 10, 'italic'),
'黑體/12/加粗' : ('黑體', 10, 'bold'),
'楷體/12/下劃線' : ('楷體', 10, 'underline')}
for key in fontDct:
tk.Button(frm, text=key, font=fontDct[key]).pack(**pack)
frm = setFrame(root, '文字對(duì)齊')
justDct = {'左對(duì)齊\n文字左側(cè)對(duì)齊' : tk.LEFT,
'居中對(duì)齊\n文字居中對(duì)齊': tk.CENTER,
'右對(duì)齊\n文字右側(cè)對(duì)齊' : tk.RIGHT}
for key in justDct:
tk.Button(frm, text=key, justify=justDct[key]).pack(**pack)
frm = setFrame(root, '邊框樣式')
reliefs = {'邊框平坦' : tk.FLAT, '邊框凹陷' : tk.SUNKEN,
'邊框凸起' : tk.RAISED, '邊框壓線' : tk.GROOVE,
'邊框脊線' : tk.RIDGE}
for key in reliefs:
tk.Button(frm, text=key, relief=reliefs[key]).pack(**pack)
frm = setFrame(root, '文字樣式')
tk.Button(frm, text='文字換行顯示', wraplength=30).pack(**pack)
tk.Button(frm, text='文字下劃線', underline=2).pack(**pack)
tk.Button(frm, text='橫向間距25', padx=25).pack(**pack)
tk.Button(frm, text='縱向間距10', pady=10).pack(**pack)
root.mainloop()共有參數(shù)
下表給出了tkinter控件中常用的三種部件Label, Button, Entry所共有的的屬性參數(shù)
| 屬性 | 說(shuō)明 |
|---|---|
| height | 高度 |
| wideth | 寬度 |
| bd | 邊框?qū)挾?/td> |
| bg | 背景顏色 |
| fg | 前景顏色 |
| relief | 3D樣式 |
| font | 文字字體 |
| justify | 文字對(duì)齊方式 |
其中,relief可以選擇tk.FLAT、tk.SUNKEN、tk.RAISED、tk.GROOVE、tk.RIDGE,每種3D樣式可見(jiàn)上圖。
justify可選tk.LEFT, tk.CENTER, tk.RIGHT,對(duì)應(yīng)左中右。
font是一個(gè)元組,包括字體、字號(hào)以及字體樣式三個(gè)內(nèi)容,字體樣式可以選擇bold, italic, underline, overstrike這四種。
此外,由于Entry中的文字是動(dòng)態(tài)變化的,所以下面三個(gè)參數(shù)適用于Label和Button,但不適用于Entry
| 屬性 | 說(shuō)明 |
|---|---|
| text | 文字 |
| underline | 下劃線 |
| wraplength | 文字行寬 |
另一方面,Button和Entry都屬于可操作控件,所以都有一個(gè)state參數(shù),用以描述控件是否可操作,可選狀態(tài)有tk.DISABLED、tk.NORMAL以及tk.ACTIVE。
動(dòng)態(tài)屬性
在一開(kāi)始給出的Button參數(shù)圖中,有鼠標(biāo)點(diǎn)擊改變背景和鼠標(biāo)點(diǎn)擊改變前景這兩個(gè)按鈕,它們對(duì)應(yīng)的屬性本質(zhì)是一種封裝好的事件。Button有這種被點(diǎn)擊觸發(fā)的事件;Entry則有選中文字后觸發(fā)的事件,下面對(duì)這幾種屬性進(jìn)行演示。

代碼如下,注意用到了上面的setFrame函數(shù)。
root = tk.Tk()
frm = setFrame(root, '按鈕顏色')
tk.Button(frm, text='鼠標(biāo)點(diǎn)擊背景變紅',
activebackground='red').pack(**pack)
tk.Button(frm, text='鼠標(biāo)點(diǎn)擊文字變紅',
activeforeground='red').pack(**pack)
frm = setFrame(root, "Entry顏色")
v1 = StringVar()
v1.set('選中文字后底色為紅色')
tk.Entry(frm, textvariable=v1, selectbackground='red').pack(**pack)
v2 = StringVar()
v2.set('選中文字后文字為紅色')
tk.Entry(frm, textvariable=v2, selectforeground='red').pack(**pack)
frm = setFrame(root, "Entry邊框")
v3 = StringVar()
v3.set('選中文字后選取邊框?qū)挾?)
tk.Entry(frm, textvariable=v3, selectborderwidth=5).pack(**pack)
v4 = StringVar()
v4.set('聚焦后改變邊框尺寸')
tk.Entry(frm, textvariable=v4, highlightthickness=5).pack(**pack)
root.mainloop()到此這篇關(guān)于Python tkinter控件樣式詳解的文章就介紹到這了,更多相關(guān)tkinter控件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python獲取beautifulphoto隨機(jī)某圖片代碼實(shí)例
python獲取beautifulphoto隨機(jī)某圖片代碼實(shí)例,大家參考使用吧2013-12-12
python實(shí)現(xiàn)將讀入的多維list轉(zhuǎn)為一維list的方法
今天小編就為大家分享一篇python實(shí)現(xiàn)將讀入的多維list轉(zhuǎn)為一維list的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-06-06
python實(shí)現(xiàn)鍵盤(pán)控制鼠標(biāo)移動(dòng)
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)鍵盤(pán)控制鼠標(biāo)移動(dòng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-10-10
jupyter安裝失敗的解決,問(wèn)題出在rust環(huán)境和32位python
文章講述了如何解決在安裝Jupyter Notebook時(shí)遇到的問(wèn)題,包括安裝Rust和選擇合適的Python版本(64位)來(lái)避免兼容性問(wèn)題2025-02-02
結(jié)合Python網(wǎng)絡(luò)爬蟲(chóng)做一個(gè)今日新聞小程序
本篇文章介紹了我在開(kāi)發(fā)過(guò)程中遇到的一個(gè)問(wèn)題,以及解決該問(wèn)題的過(guò)程及思路,通讀本篇對(duì)大家的學(xué)習(xí)或工作具有一定的價(jià)值,需要的朋友可以參考下2021-09-09
python深copy和淺copy區(qū)別對(duì)比解析
這篇文章主要介紹了python深copy和淺copy區(qū)別對(duì)比解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12

