Tkinter如何设置指定列所有Label的默认列宽与字号?
嗨,我来帮你搞定这个问题!
首先得先解释你遇到的报错原因:你用Label.config()的时候,是直接调用了Label这个类的方法,但config()(也就是configure())是实例方法——它需要作用在一个具体的Label对象上,而不是类本身,所以才会提示缺少self参数(这个参数是Python自动传递给实例方法的,你直接调类的话就没这个参数了)。
回到你的需求:想给指定列的Label设置默认样式,有两种更优雅的实现方式,结合你的代码给你梳理清楚:
方式1:用ttk Style统一设置+列宽配置
你已经尝试用ttk.Style了,但代码里混用了普通tk组件(Entry、Button)和ttk组件,而且可以通过grid_columnconfigure直接给整列设置宽度,不用单独给每个Label加width:
修改后的完整代码:
from tkinter import * from tkinter import ttk reasons_window = Tk() reasons_window.geometry("500x200") # 初始化ttk样式,配置全局TLabel的字体 style = ttk.Style(reasons_window) style.configure('TLabel', font=('Courier', 15)) # 给第0列设置默认最小宽度(整列所有组件都会遵循这个宽度) reasons_window.grid_columnconfigure(0, minsize=70) # 创建ttk Label,自动应用上面配置的TLabel样式 label1 = ttk.Label(reasons_window, text="Qty") label1.grid(row=0, column=0) # 换成ttk Entry,保持界面风格统一 e1 = ttk.Entry(reasons_window) e1.grid(row=0, column=1) def eval_click(): # 加个异常处理,防止输入非数字崩溃 try: if int(e1.get()) == 100: print('GO AHEAD') except ValueError: print("请输入有效的数字哦!") # 换成ttk Button,风格统一 eval_button = ttk.Button(reasons_window, text="Evaluate", command=eval_click) eval_button.grid(row=3, column=0) reasons_window.mainloop()
方式2:自定义专属样式,只给目标列Label用
如果不想全局所有ttk Label都用这个样式,只想给指定列的Label单独设置,可以自定义一个样式:
# 自定义一个专属样式 style.configure('Column0.TLabel', width=70, font=('Courier',15)) # 创建Label时指定用这个样式 label1 = ttk.Label(reasons_window, text="Qty", style='Column0.TLabel')
这样只有显式指定style='Column0.TLabel'的Label才会应用这个样式,其他Label不受影响。
内容的提问来源于stack exchange,提问作者Sid
相关产品推荐
相关产品推荐

