您好,我一直在试图弄清楚如何将此代码转换为我可以使用的内容,但我没有运气:(。我一直试图让这些按钮不仅切换页面,但同时做一个更简单的命令,我想不知何故我应该做1个功能,将做两件事,而不是2个单独的功能,但我仍然是新的python,甚至更多的tkinter和每次当我尝试更改这些按钮命令或功能时,我都会遇到某种错误,似乎我找不到办法做到这一点,你能帮我解决吗?提前谢谢。
编辑:我删除了一些不需要的代码,我认为需要休息。至于我失败的尝试,我将在此代码下面添加一些尝试。
from tkinter import *
class App(Tk):
def __init__(self):
Tk.__init__(self)
container = Frame(self)
container.pack(side="top", fill="both", expand = True)
self.frames = {}
for F in (StartPage, PageOne, PageTwo):
frame = F(container, self)
self.frames[F] = frame
frame.grid(row=0, column=0, sticky="nsew")
self.show_frame(StartPage)
def show_frame(self, cont):
frame = self.frames[cont]
frame.tkraise()
class StartPage(Frame):
def __init__(self, parent, controller):
Frame.__init__(self,parent)
label = Label(self, text="Start Page")
label.pack(pady=10,padx=10)
button = Button(self, text="Visit Page 1",
command=lambda: controller.show_frame(PageOne))
button.pack()
class PageOne(Frame):
def __init__(self, parent, controller):
Frame.__init__(self, parent)
label = Label(self, text="Page One!!!")
label.pack(pady=10,padx=10)
button1 = Button(self, text="Back to Home",
command=lambda: controller.show_frame(StartPage))
button1.pack()
app = App()
app.mainloop()
我一直在尝试将这两个功能结合起来:
def show_frame(self, cont):
frame = self.frames[cont]
frame.tkraise()
def calculate(self):
e1 = self.v1.get()
e2 = self.v2.get()
entry1 = int(self.entry1.get())
entry2 = int(self.entry2.get())
k = entry1 * entry2
print(k)
尝试从这两个中创建1个函数:
def run_all(self, cont):
frame = self.frames[cont]
frame.tkraise()
e1 = self.v1.get()
e2 = self.v2.get()
entry1 = int(self.entry1.get())
entry2 = int(self.entry2.get())
k = entry1 * entry2
print(k)
不确定在参数下放什么。 我也尝试更改此按钮命令:
button = Button(self, text="Visit Page 1",
command=lambda: controller.show_frame(PageOne))
button.pack()
尝试使用和不使用lambda编写此命令,但没有任何效果。
答案 0 :(得分:1)
使用按钮可以通过多种方式完成多项操作。例如,我会先审核this effbot page,然后再进一步了解,或者另一个Tkinter教程
def callback():
controller.show_frame(PageOne)
doSomethingElse()
button = Button(root, command=callback)
在这种情况下,我们正在创建一个调用其他两个函数的函数。这是直观的解决方案。请注意,functions generated with the lambda关键字与其他任何功能相同 - 不要让您感到困惑。
这是你不应该做的事,虽然它可能有用
或者,写作
可能很诱人 button = Button(root, command=lambda : [foo(), bar()]
在这种情况下,lambda函数将返回两个值的列表,需要通过调用这两个函数来计算。当然,该列表会被忽略,因为您没有使用返回值。
更糟糕的原因:
funcs = [foo,bar]; lambda : (f for f in funcs)
可能,也可能不会。在python 2中,元组将被完全评估,但在python3中你会得到一个神秘的生成器表达式