框架不显示 | python tkinter

问题描述 投票:0回答:1

我试图在窗口中显示我的框架,但由于某种原因它给了我一个空白窗口。这是我第一次使用 tkinter 的类,我需要在对象中调用它吗?

from customtkinter import *

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])
        # widget
        self.menu = CTkFrame(self)       
        # run
        self.mainloop()


    class Menu(CTkFrame):
        def __init__(self, parent):
            super().__init__(parent)
            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()







app('Scoring Software', (600,600))

python tkinter
1个回答
0
投票

您会看到一个空白窗口,因为您没有在 self.menu 小部件上调用

pack()
grid()
place()
方法。

要解决此问题,您可以在第 13 行添加

self.menu.pack()
。完整代码如下:

from customtkinter import *


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])
        # widget
        self.menu = CTkFrame(self)
        self.menu.pack()
        # run
        self.mainloop()

    class Menu(CTkFrame):
        def __init__(self, parent):
            super().__init__(parent)
            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, values=["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()


app('Scoring Software', (600, 600))

但是你的代码看起来很奇怪,你正在创建一个 Menu 类但没有使用它。

如果您认为这样做

class Menu(CTkFrame):
会完全覆盖 CTkFrame 类,那您就错了,它只是创建了一个具有修改方法的新类。

要使用您创建的 Menu 类,您应该将第 12 行替换为:

self.menu = self.Menu(self)

希望我能帮助到你,祝你有美好的一天

© www.soinside.com 2019 - 2024. All rights reserved.