我试图在窗口中显示我的框架,但由于某种原因它给了我一个空白窗口。这是我第一次使用 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))
您会看到一个空白窗口,因为您没有在 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)
希望我能帮助到你,祝你有美好的一天