tkinter中ttk控件width与height参数设置详解

听雨眠
听雨眠
发布时间:2026-10-12| 2人浏览过
原创

本文详细解析tkinter中ttk系列控件的width和height参数设置规则。涵盖顶级窗口、Frame容器及Label、Button、Entry、Combobox等常用控件的尺寸单位差异(像素与字符)。重点说明图文混合显示时的宽度失效情况,以及Scale、Progressbar等控件的特殊属性限制,帮助开发者精准控制界面布局。

ttk控件的width-height设置

在tkinter中,若窗口、框架容器或控件未显式指定宽度与高度,系统将依据内部内容自动计算并设置其尺寸。

当框架容器明确设置了宽度与高度,但其内部包含其他控件时,容器预设的尺寸参数将失效,容器会自动适应内部控件的大小。

若窗口、框架容器或控件内部没有任何内容,其宽度和高度将保持为默认的最小尺寸,这在视觉上可能表现为不可见或极小。

顶级窗口

对于顶级窗口(Toplevel),其高度和宽度的单位均为像素点。

import tkinter as tk
from tkinter import ttk
win = tk.Tk()
win1 = tk.Toplevel()
win.geometry('600x600') #设置顶级窗口宽度高度,单位像素点
win1.geometry('600x600') #设置顶级窗口宽度高度,单位像素点
#笔记本屏幕分辨率如果是1366x768,那么geometry('1366x768')铺满整个屏幕(当然不建议)

框架容器

Frame、LabelFrame和PanedWindow等框架容器控件,其高度和宽度的单位同样为像素点。

win = tk.Tk()
win.title("TTK_GUI")
win.geometry("600x600+10+10")
s = ttk.Style()
s.configure('1.TFrame',background='DarkGray')
frame1 = ttk.Frame(win,width=500,height=100,style='1.TFrame')
frame1.pack(pady=10)
s.configure('2.TLabelframe')
labelframe1 = ttk.LabelFrame(win,text='labelframe1',width=500,height=100,
                             style='2.TLabelframe')
labelframe1.pack(pady=10)
s.configure('2.TPanedwindow',background='DarkGray')
panedwindow1 = ttk.PanedWindow(win,width=500,height=100,
                               style='2.TPanedwindow')
panedwindow1.pack(pady=10)

控件-Label

当Label内容为纯文本时,width参数的单位是字符单位;若内容为图片,则直接显示图片的原始大小,此时忽略width设置。

当内容为图文混合显示,且图片宽度(像素点)小于width值(字符单位)时,width单位仍为字符单位。

如果图片尺寸过大,导致超出设定范围,则width设置将失效。

import tkinter as tk
from tkinter import ttk
import tkinter.font as tkFont
s = ttk.Style()
image1 = tk.PhotoImage(file="001.png") #PhotoImage支持gif,png格式
ft1 = tkFont.Font(family='Consolas',size=10,weight='bold')
s.configure('1.TLabel',font=ft1,background='DarkGray',foreground='red',
            width=40,anchor='center',justify='left',padding=[2,0,2,0])
label1 = ttk.Label(win,text='第一行文字word \nThis is second 
                   row',style='1.TLabel')
label1.pack()
label2 = ttk.Label(win,text='标签23',image=image1,compound='center',style='1.TLabel')
label2.pack(pady=2)
#anchor='center',justify='left' # 整体居中,多行文本左对齐

控件-Button类

Button、Checkbutton、Radiobutton和Menubutton等按钮类控件:

当内容为纯文本时,width单位是字符单位;若内容为图片,则显示图片原始大小,忽略width设置。

当内容为图文混合,且图片宽度(像素点)小于width值(字符单位)时,width单位仍为字符单位。

若图片尺寸过大,则width设置失效。

ft1 = tkFont.Font(family='Consolas',size=10,weight='bold')
image1 = tk.PhotoImage(file="001.png") #PhotoImage支持gif,png格式
s.configure('1.TButton',foreground='blue',justify='center',width=40,font=ft1)
b1 = ttk.Button(win,text='按钮',style='1.TButton')
b1.pack(pady=2)
b2 = ttk.Button(win,text='按钮',image=image1,compound='center',style='1.TButton') 
b2.pack(pady=2)
b3 = ttk.Button(win,image=image1) 
b3.pack(pady=2)
#忽略宽度高度设置,自动显示原始大小图片,
#若图片尺寸超过button父控件宽度高度,只显示部分图片

控件-Entry

Entry控件中,若内容为文本,width单位是字符单位,具体基于该控件字体的平均字符大小(average-size characters of the widget's font)。

s.configure('1.TEntry',padding=[2,0,2,0])
e1 = ttk.Entry(win,textvariable=etxt,foreground='red',width=40,font=ft1,
               justify='center',style='1.TEntry')
e1.pack(pady=2)

控件-Combobox

对于Combobox,width参数设置长度,单位为控件字体的平均字符大小;height参数设置高度,单位为行数。

val1=[1,2,3,4]
s.configure('1.TCombobox',padding=[-5,0,-5,0])
cc1 = ttk.Combobox(win,width=40,height=3,values=val1,style='1.TCombobox')
cc1.pack(pady=2)

控件-Spinbox

Spinbox中,width参数设置长度,单位为控件字体的平均字符大小。

val2=['AVC','x264','345f','FRD6hy']
sp1 = ttk.Spinbox(win,values=val2,width=39,
                  foreground='red',justify='center',font=ft1)
sp1.pack(pady=2)

控件-Scale

Scale控件中,length参数设置长度,单位为像素点。

ttk中的Scale属性(如showvalue、resolution、label)可用性不如tk.Scale,建议尽量避免使用ttk.Scale。

控件-Progressbar

Progressbar中,length参数设置长度,单位为像素点。

prbar = ttk.Progressbar(win,length=300)
prbar.pack(pady=2)

控件-Notebook

Notebook控件的宽度和高度,单位均为像素点。

labelframe1 = ttk.LabelFrame(win,text='labelframe1',width=500,height=100)
labelframe1.pack(pady=2)
tabControl = ttk.Notebook(labelframe1,width=300,height=80)
tabControl.pack(expand=1,fill='both')
tab1 = ttk.Frame(tabControl)
tabControl.add(tab1,text='Tab 1')
tab2 = ttk.Frame(tabControl)
tabControl.add(tab2,text='Tab 2')

控件-Scrollbar

Scrollbar控件无长度和宽度设置,通常通过pack(fill='x')或pack(fill='y')来定义其布局方向。

总结

以上为个人经验总结,希望能给大家一个参考,也希望大家多多支持本站。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。