Python3-tkinter更改页面传递额外参数

Python3-tkinter更改页面传递额外参数,python,python-3.x,tkinter,Python,Python 3.x,Tkinter,我有以下代码,允许我毫无问题地更改页面(与其他框架重叠的情况相比更多): 我有更多类似于第一个页面的页面,我只是没有复制代码,因为几乎相同 如果您可以看到我有不同的按钮,单击我可以更改页面: tk.Button(self.menu, text="Spese",command=lambda: self.controller.show_frame("PageTwo")) 现在我的问题是,我有一个返回整数的功能,我需要调用一个传递该值的新页面。 我尝试以调用其他所有页面的相同方式调用该页面,但无法使

我有以下代码,允许我毫无问题地更改页面(与其他框架重叠的情况相比更多):

我有更多类似于第一个页面的页面,我只是没有复制代码,因为几乎相同

如果您可以看到我有不同的按钮,单击我可以更改页面:

tk.Button(self.menu, text="Spese",command=lambda: self.controller.show_frame("PageTwo"))
现在我的问题是,我有一个返回整数的功能,我需要调用一个传递该值的新页面。 我尝试以调用其他所有页面的相同方式调用该页面,但无法使用额外的值(整数):

问题是,每次我有一个新参数作为新页面类的可选参数时,我的代码都会在类Hflair中失败

我试图在主类(类Hflair)中作为可选参数传递额外的参数,但我的代码仍然失败

有人可以帮助我,请或解释我如何才能引入一个额外的参数仅为1页

当我将新参数仅添加到我的页面调用时,我在此行收到此错误:

frame=F(父对象=容器,控制器=自身)

init()缺少1个必需的位置参数:“attr”

如果以这种方式添加可选参数:

frame = F(parent=container, controller=self, attr=None)
我收到这个错误:

init()获得意外的关键字参数“attr”

我认为我犯了一些愚蠢的错误,但我不明白:S

对不起,我是新来的


如果您调用带有额外参数的函数,请提前感谢您的帮助

self.controller.show_frame("PageTwo",4) 
def show_frame(self, page_name, arg):
def show_frame(self, page_name, arg=None):
class StartPage(tk.Frame):
     def __init__(self, parent, controller, attr=None):

class PageOne(tk.Frame):
     def __init__(self, parent, controller, attr=None):

class PageTwo(tk.Frame):
     def __init__(self, parent, controller, attr=None):
然后你必须用额外的参数定义函数/方法

self.controller.show_frame("PageTwo",4) 
def show_frame(self, page_name, arg):
def show_frame(self, page_name, arg=None):
class StartPage(tk.Frame):
     def __init__(self, parent, controller, attr=None):

class PageOne(tk.Frame):
     def __init__(self, parent, controller, attr=None):

class PageTwo(tk.Frame):
     def __init__(self, parent, controller, attr=None):
或更通用的默认值,因此您可以使用或不使用额外参数调用
show\u frame()

self.controller.show_frame("PageTwo",4) 
def show_frame(self, page_name, arg):
def show_frame(self, page_name, arg=None):
class StartPage(tk.Frame):
     def __init__(self, parent, controller, attr=None):

class PageOne(tk.Frame):
     def __init__(self, parent, controller, attr=None):

class PageTwo(tk.Frame):
     def __init__(self, parent, controller, attr=None):
然后在
show_frame()
中,您必须对这个参数做一些处理


如果要在创建框架时使用参数

frame = F(parent=container, controller=self, attr=some_value)
然后,您必须使用额外的参数定义所有页面

self.controller.show_frame("PageTwo",4) 
def show_frame(self, page_name, arg):
def show_frame(self, page_name, arg=None):
class StartPage(tk.Frame):
     def __init__(self, parent, controller, attr=None):

class PageOne(tk.Frame):
     def __init__(self, parent, controller, attr=None):

class PageTwo(tk.Frame):
     def __init__(self, parent, controller, attr=None):
但是您必须在
中为
循环使用额外的参数

或者使用类似的方法来显示框架

for F, arg in ((StartPage, 4), (PageOne, 1), (PageTwo, None), (PageThree, None)):
    page_name = F.__name__
    frame = F(parent=container, controller=self)

    if arg:
        frame.arg = arg
        # or
        frame.some_function(arg)

然后在
F(…)
\uuuu init\uuuuu(…)

中不需要参数,当您将值传递到
显示页面
时,您希望发生什么?您知道另一个页面已经创建了吗?您希望它如何使用此值?您是否阅读了所有关于切换帧的其他问题,以查看它们是否有帮助?从这里开始:嗨@BryanOakley,所以我知道该页面是创建的,但创建为黑色。我举了一个我想要做的例子,我在数据库中有不同的用户,我传递页面和用户id,并动态地从数据库中获取所有信息,所以我有一个独特的页面,当我调用用户配置文件时,页面上的帧会重叠!我做错了吗?太好了,太好了