Python?tkinter控件樣式詳解
以按鈕為例
tkinter對控件的諸多屬性提供了可定制的功能,下面以最常用的按鈕作為示例,集中展示其樣式特點,而后再詳細給出每種樣式所支持的部件類型。
這里面并不涉及到諸如寬度width,高度height,以及調(diào)控與其他部件最小間隔的padx, pady,而只專注于能夠體現(xiàn)“樣式”的屬性。
其繪制代碼如下,整體采用pack布局,每一組風格均放在一個Frame中,每個Frame都有一個Label和圖像一一對應,然后所有Frame縱向排布下去。
import tkinter as tk import tkinter.ttk as ttk root = tk.Tk() # 用于設置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='鼠標點擊改變背景', activebackground='blue').pack(**pack) tk.Button(frm, text='鼠標點擊改變前景', 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, '文字對齊') justDct = {'左對齊\n文字左側對齊' : tk.LEFT, '居中對齊\n文字居中對齊': tk.CENTER, '右對齊\n文字右側對齊' : 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ù)
屬性 | 說明 |
---|---|
height | 高度 |
wideth | 寬度 |
bd | 邊框?qū)挾?/td> |
bg | 背景顏色 |
fg | 前景顏色 |
relief | 3D樣式 |
font | 文字字體 |
justify | 文字對齊方式 |
其中,relief可以選擇tk.FLAT、tk.SUNKEN、tk.RAISED、tk.GROOVE、tk.RIDGE,每種3D樣式可見上圖。
justify可選tk.LEFT, tk.CENTER, tk.RIGHT,對應左中右。
font是一個元組,包括字體、字號以及字體樣式三個內(nèi)容,字體樣式可以選擇bold, italic, underline, overstrike這四種。
此外,由于Entry中的文字是動態(tài)變化的,所以下面三個參數(shù)適用于Label和Button,但不適用于Entry
屬性 | 說明 |
---|---|
text | 文字 |
underline | 下劃線 |
wraplength | 文字行寬 |
另一方面,Button和Entry都屬于可操作控件,所以都有一個state參數(shù),用以描述控件是否可操作,可選狀態(tài)有tk.DISABLED、tk.NORMAL以及tk.ACTIVE。
動態(tài)屬性
在一開始給出的Button參數(shù)圖中,有鼠標點擊改變背景和鼠標點擊改變前景這兩個按鈕,它們對應的屬性本質(zhì)是一種封裝好的事件。Button有這種被點擊觸發(fā)的事件;Entry則有選中文字后觸發(fā)的事件,下面對這幾種屬性進行演示。
代碼如下,注意用到了上面的setFrame函數(shù)。
root = tk.Tk() frm = setFrame(root, '按鈕顏色') tk.Button(frm, text='鼠標點擊背景變紅', activebackground='red').pack(**pack) tk.Button(frm, text='鼠標點擊文字變紅', 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()
到此這篇關于Python tkinter控件樣式詳解的文章就介紹到這了,更多相關tkinter控件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
python獲取beautifulphoto隨機某圖片代碼實例
python獲取beautifulphoto隨機某圖片代碼實例,大家參考使用吧2013-12-12python實現(xiàn)將讀入的多維list轉(zhuǎn)為一維list的方法
今天小編就為大家分享一篇python實現(xiàn)將讀入的多維list轉(zhuǎn)為一維list的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-06-06jupyter安裝失敗的解決,問題出在rust環(huán)境和32位python
文章講述了如何解決在安裝Jupyter Notebook時遇到的問題,包括安裝Rust和選擇合適的Python版本(64位)來避免兼容性問題2025-02-02