You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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))

简单说下修改点:

  1. Menu类从app类中移出来,作为独立的类,这样逻辑更清晰。
  2. app的初始化方法里,创建Menu类的实例并赋值给self.menu,这样自定义的Frame就会被正确创建并布局到窗口里了。

这样运行后,你就能看到左侧的菜单Frame和里面的下拉选择框啦!

备注:内容来源于stack exchange,提问作者Samurai

火山引擎 最新活动