自定义Tkinter GPULabel类嵌入后不显示问题排查与解决
问题原因与解决方法
问题原因
你自定义的GPULabel类在继承Label时,调用父类构造函数super().__init__()没有传入master参数。Tkinter的所有组件都必须明确指定父容器才能被正确添加到界面中,当前代码相当于把GPULabel的父容器默认设为了根窗口,但后续又尝试用pack()把它放到LabelFrame里,这种冲突导致组件无法正常显示。另外,varText = varText这行代码完全多余,没有实际作用。
解决方法
修改GPULabel的__init__方法,将master参数传递给父类的构造函数,同时可以直接在父类构造中传入配置参数,简化代码:
from tkinter import * def main(): main_window = Tk() app = First(main_window) main_window.mainloop() class GPULabel(Label): def __init__(self, master, varText): # 把master传给父类,同时直接传入text、anchor、width参数 super().__init__(master, text=varText, anchor="w", width=25) class First: def __init__(self, root): self.root = root self.root.title('First Window') self.myFrame = LabelFrame(self.root, text="frame") self.myFrame.pack() label1 = GPULabel(self.myFrame, "label") label1.pack() if __name__ == '__main__': main()
这样修改后,GPULabel会正确挂载到指定的LabelFrame父容器中,界面就能正常显示内容了。
内容的提问来源于stack exchange,提问作者Avila
相关产品推荐
相关产品推荐

