Tkinter父类动态修改Label颜色时标签属性为None如何解决
问题成因
- Tkinter 中
grid()、pack()、place()三类布局方法的返回值均为None,你在创建 Label 对象后直接链式调用了grid()方法,最终赋值给self.lbl_netm的是grid()的返回值,而非 Label 实例本身,因此后续访问该属性时始终为None。
解决方案
将 InfoGeneralFrame 类中 lbl_netm 的创建和布局操作拆分,先创建 Label 实例赋值给实例属性,再单独调用布局方法即可,修改后代码如下:
class InfoGeneralFrame(Frame): COL_GREEN = "#179900" COL_RED = "#f70f02" COL_NETM = "#000" COL_BLUE_LT = "#049dc7" COL_BLUE = "#0940e6" rate_txt = 15 rate_txt2 = 12 name_txt = 9 name_txt2 = 8 pad_x = 10 def __init__(self, tab, *args, **kwargs) -> None: super().__init__(tab, *args, **kwargs) # ** 其他Label和控件定义 ** # 第一步:创建Label实例并赋值给实例属性 self.lbl_netm = Label( self, text="00.00%", font=("Halvetica", self.rate_txt, "bold"), foreground=self.COL_NETM, background="#fff", ) # 第二步:单独调用布局方法,不要链式调用 self.lbl_netm.grid(row=3, column=0, sticky="ns", padx=self.pad_x)
修改后 self.lbl_netm 会正常存储 Label 实例,后续在 show_info_frame 方法中调用 config() 修改属性即可正常生效。如果你有其他后续需要修改属性的控件,也需要遵循「先创建赋值、再单独调用布局方法」的规则,避免出现同样的空值问题。
内容的提问来源于stack exchange,提问作者user9811098
相关产品推荐
相关产品推荐

