gpt4 book ai didi

python - Tkinter 小部件全部打包在同一个框架中

转载 作者:行者123 更新时间:2023-12-01 00:56:15 26 4
gpt4 key购买 nike

我正在尝试制作一个相当简单的具有多个窗口的 GUI。我将我的窗口构建为类,目前每个窗口中都带有一个标签。我似乎无法弄清楚为什么当我运行我的程序时,它会打包“StartPage”上的所有标签,而其他窗口中都没有任何内容。可能是我的类配置不正确?

import tkinter as tk


class application(tk.Tk):

def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
container = tk.Frame(self)
container.pack(side = 'top', fill = 'both', expand = True)

container.grid_rowconfigure(0, weight = 1)
container.grid_columnconfigure(0, weight = 1)

self.frames = {}

for F in (StartPage, WeeklyBudget, LongtermSavings, Investments):
frame = F(container, self)
self.frames[F] = frame

frame.grid(row=0, column=0, sticky="nsew")


self.ShowFrame(StartPage)

def ShowFrame(self, cont):
frame = self.frames[cont]
frame.tkraise()


class StartPage(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
start_label = tk.Label(self, text = 'Welcome to Finance Track!')
start_label.pack()
week_btn = tk.Button(self, text = 'Weekly Budgeting', command =lambda: controller.ShowFrame(WeeklyBudget))
savings_btn = tk.Button(self, text = 'Longterm Savings', command = lambda: controller.ShowFrame(LongtermSavings))
invest_btn = tk.Button(self, text = 'Investments', command = lambda: controller.ShowFrame(Investments))


week_btn.pack(pady = 10, padx = 10)
savings_btn.pack(pady = 10, padx = 10)
invest_btn.pack(pady = 10, padx = 10)

class WeeklyBudget(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
label = tk.Label(text = 'Welcome to your Weekly Budget')
label.pack()
add_btn = tk.Button(text = 'add new week')
add_btn.pack()

class LongtermSavings(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
label = tk.Label(text = 'Welcome to your Longterm Savings')

label.pack()

class Investments(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
label = tk.Label(text = 'Welcome to your Investments')
label.pack()

app = application()
app.mainloop()

正如我之前所描述的,当前的结果只是一个窗口,其中包含所有标签和所有按钮。

最佳答案

正如 jasonharper 提到的,您没有定义许多小部件的父级(也称为主级)。

class Investments(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
label = tk.Label(text = 'Welcome to your Investments')
label.pack()

使用这个 Investments 类,默认情况下,您的标签将被赋予窗口作为其父级,要将其父级设置为新创建的框架,只需执行以下操作:

class Investments(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
label = tk.Label(self, text = 'Welcome to your Investments')
label.pack()

关于python - Tkinter 小部件全部打包在同一个框架中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56227673/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com