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,并动态地从数据库中获取所有信息,所以我有一个独特的页面,当我调用用户配置文件时,页面上的帧会重叠!我做错了吗?太好了,太好了