我一直试图调用函数showframe,这需要两个aurgument。当我从HomePage中的Button命令调用它时显示错误。 TypeError:showframe()缺少1个必需的位置参数:'frame_name'。我无法理解为什么?由于我按类名称调用它应该自动获取self,然后frame_name将获得SignIn类。但那没有发生。
class Culpture(Frame):
def __init__(self, root):
Frame.__init__(self, root)
fhome = HomePage(root)
fsignin = SignIn(root)
self.showframe(fhome)
fhome.grid(row=0, column=0, sticky='nsew')
fsignin.grid(row=0, column=0, sticky='nsew')
self.grid_rowconfigure(0, weight=1)
self.grid_columnconfigure(0, weight=1)
def showframe(self, frame_name):
frame_name.tkraise()
class HomePage(Frame):
def __init__(self, parent):
Frame.__init__(self, parent)
Label(self, text="Homepage").grid()
Button(self, text='SignIn', command=lambda: Culpture.showframe(SignIn), width=20).grid()
如果我这样做,
Button(self, text='SignIn', command=lambda: Culpture.showframe(parent, SignIn), width=20).grid()
然后它显示另一条错误消息。 TypeError:tkraise()缺少1个必需的位置参数:'self' 所以我试着看一些问题我得到了一个是接近我的解决方案Python/Tkinter Event Argument Issue
但不一样。如果我尝试另一种方式
Button(self, text='SignIn', command=lambda: Culpture.showframe(parent, SignIn(parent)), width=20).grid()
然后它显示没有错误,但按钮不会打开新框架。
class SignIn(Frame):
def __init__(self, parent):
Frame.__init__(self, parent)
Label(self, text="SignIn").grid()
Button(self, text='Submit', width=20).grid()
如果你们中的任何人能帮助我,那将会非常有帮助。
答案 0 :(得分:1)
在代码中的某处,您需要创建Culpture
的实例。您需要使用该实例来调用show_frame
。执行此操作时,实例将自动作为self
参数传递,您传递的参数将为frame_name
。
culpture = Culpture(root)
...
culpsure.show_frame(fsignin)
您没有显示创建Culpture
实例的位置,因此很难比这更具体。
答案 1 :(得分:1)
你做错了事。理想情况下,您应该为不同的页面创建不同的类,这将使代码更简洁。
因此,为SignIn创建一个不同的类,为home创建另一个类。
以下是用python3编写的:
<application>
如果这不起作用,请告诉我。 另外,要添加更多页面:
如果它们是互连的 - 将类的名称添加到同一个循环中。
如果他们连接到某个共同的页面 - 使用名称制作一个新的lop。