CustomTkinter自定义Frame无法显示,窗口空白问题求助
CustomTkinter自定义Frame无法显示,窗口空白问题求助
嗨,我看了你的代码,很快就发现问题所在啦!你现在窗口空白的原因主要有两个:
- 你虽然定义了自己的
Menu类(继承自CTkFrame),但并没有真正去实例化这个自定义的Frame,反而创建了一个普通的CTkFrame实例self.menu,而且这个普通Frame你连布局(比如place/pack/grid)都没做,当然看不到任何内容啦。 - 另外把
Menu类嵌套在app类里面其实没必要,反而容易让代码逻辑混乱,建议把它改成独立的类。
下面是修改好的代码,你可以直接试试:
from customtkinter import * # 把Menu类改成独立的类,不再嵌套在app里 class Menu(CTkFrame): def __init__(self, parent): super().__init__(parent) # 这里你原来的布局代码是对的,会让这个Frame占左侧30%宽度 self.place(x=0,y=0, relwidth = 0.3, relheight = 1) self.create_widgets() def create_widgets(self): heading_var = StringVar(value="Ethan") def heading_combo(choice): print(choice) heading = CTkComboBox(self, value=["Ethan","Brock", "Liam"], command=heading_combo,variable=heading_var) self.columnconfigure((0,1,2),weight=1, uniform='a') self.rowconfigure((0,1,2,3,4),weight=1, uniform='a') heading.pack() class app(CTk): def __init__(self, title, size): # main setup super().__init__() self.title(title) self.geometry(f'{size[0]}x{size[1]}') self.minsize(size[0],size[1]) # 这里实例化我们自定义的Menu类,而不是普通CTkFrame self.menu = Menu(self) # run self.mainloop() app('Scoring Software', (600,600))
简单说下修改点:
- 把
Menu类从app类中移出来,作为独立的类,这样逻辑更清晰。 - 在
app的初始化方法里,创建Menu类的实例并赋值给self.menu,这样自定义的Frame就会被正确创建并布局到窗口里了。
这样运行后,你就能看到左侧的菜单Frame和里面的下拉选择框啦!
备注:内容来源于stack exchange,提问作者Samurai




