Я пытаюсь сделать простое приложение Magic Eight Ball просто для практики.Я использую tkinter и python 3.0.Я пытаюсь переключить фреймы на следующую часть приложения, но не могу обойти это.Мне просто интересно, что не так с этим кодом, так как каждый раз, когда я пытаюсь его исправить, он просто выдает ошибку «контейнер не определен» или «PageOne не имеет атрибута« tk »».Я хотел бы сказать, что я до сих пор довольно комфортно с tkinter и могу создавать базовые графические интерфейсы, которые имеют только одну страницу.Тем не менее, я просто не могу с этим работать.Вот код:
import tkinter as tk
class EightBall(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args,**kwargs)
container = tk.Frame(self)
container.configure(width=500, height=500)
container.pack()
self.frames={}
for F in (StartPage, PageOne):
frame = F(container,self)
self.frames[F]=frame
frame.configure(width=500,height=500)
frame.pack()
self.show_frame(StartPage)
def show_frame(self,controller):
frame=self.frames[container]
frame.tkraise()
class StartPage(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self,parent)
HomeButton=tk.Button(self, text="Press to play",
command=lambda: controller.show_frame(PageOne))
HomeLabel=tk.Label(self, text="Magic 8 Ball", fg="white",bg="blue")
HomeLabel.configure(font="Arial 22")
HomeButton.place(relx=0.5,rely=0.5,anchor="center")
HomeLabel.place(relx=0.35,y=10)
class PageOne(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self,parent)
PageOneLabel=tk.Label(PageOne,text="What is your name?")
PageOneEntry=Entry(PageOne)
PageOneButton=tk.Button(PageOne, text="Enter",
command=lambda: controller.show_frame(PageTwo))
PageOneLabel.place(relx=0.50,rely=0.45)
PageOneEntry.place(relx=0.50,rely=0.50)
PageOneButton.place(relx=0.50,rely=0.55)
app=EightBall()
app.mainloop()
Что я делаю не так?