Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Tkinter:如何通过函数将两个命令分配给按钮?_Python_Tkinter - Fatal编程技术网

Python Tkinter:如何通过函数将两个命令分配给按钮?

Python Tkinter:如何通过函数将两个命令分配给按钮?,python,tkinter,Python,Tkinter,我想创建一个“输入名称”条目,向用户打印欢迎消息。我最近在tkinter上发布了关于如何切换帧的帮助。我想出来了,解决了那个问题 但是,现在我想在点击按钮时切换帧并打印标签条目。我的代码中没有收到任何错误,但是returnEntry()函数没有任何作用。它不会提升框架,我认为它也不会检索条目文本。(如果没有returnEntry()函数,框架确实会提升框架,但使用代码它不会。这有意义吗?还是我让事情复杂化了 代码如下: def show_frame(frame): frame.tkrai

我想创建一个“输入名称”条目,向用户打印欢迎消息。我最近在tkinter上发布了关于如何切换帧的帮助。我想出来了,解决了那个问题

但是,现在我想在点击按钮时切换帧并打印标签条目。我的代码中没有收到任何错误,但是
returnEntry()
函数没有任何作用。它不会提升框架,我认为它也不会检索条目文本。(如果没有
returnEntry()
函数,框架确实会提升框架,但使用代码它不会。这有意义吗?还是我让事情复杂化了

代码如下:

def show_frame(frame):
    frame.tkraise()


def returnEntry():
    result=NameEntry.get()
    Label3.config(text=result)

def WelcomeName():
    show_frame(f3)
    returnEntry()


f1 = Frame(root)
f2 = Frame(root)
f3 = Frame(root)
f4 = Frame(root)
for frame in (f1, f2, f3, f4):
    frame.config(width=500,height=500, bg="light blue")
    frame.place(relx=0.5,rely=0.5,anchor="center")


#First Page
Button(f1, text='Click to Play', command=lambda: show_frame(f2)).place(relx=0.5,rely=0.5,anchor="center")
Label(f1, text='Magic 8 Ball', fg="White", bg="dark blue",
      font="Veranda 19").place(relx=0.5,rely=0.20,anchor="center")


#Second page
Label(f2, text='Enter your name:',fg="White", bg="dark blue",
      font="veranda 17").place(relx=0.5,rely=0.40,anchor="center")
NameEntry=Entry(f2,font="veranda 15").place(relx=0.5,rely=0.5,anchor="center")
Button2=Button(f2, text='Continue', font="veranda 15",
       command=lambda: returnEntry).place(relx=0.5,rely=0.60,anchor="center")


#Third Page
Label3=Label(f3,text="",bg="light blue",font="veranda 15").place(relx=0.5,rely=0.35,anchor="center")
Label4=Label(f3, text="Ask me a yes or no question and reveal the truth" , bg="light blue",font="veranda 15")
Label4.place(relx=0.5,rely=0.45,anchor="center")
QuestionEntry=Entry(f3, font="veranda 15").place(relx=0.5,rely=0.52,anchor="center")
Button(f3, text='Ask away', command=lambda: show_frame(f4)).place(relx=0.5,rely=0.6,anchor="center")

抱歉,代码太草率了。

您不能这样做。您必须创建第三个函数来调用所需的两个函数,并将第三个函数赋予按钮命令

def on_click():
    do_thing_1()
    do_thing_2()

btn = Button(command=on_click)
我强烈建议您在了解lambda的工作原理之前不要使用它

另外,您不应该在同一行上初始化和布局小部件,这会导致错误。始终使用两行

# BAD: NameEntry is None, and can't be used
NameEntry=Entry(f2,font="veranda 15").place(relx=0.5,rely=0.5,anchor="center")

# good: NameEntry is an Entry instance, and can be used later
NameEntry=Entry(f2,font="veranda 15")
NameEntry.place(relx=0.5,rely=0.5,anchor="center")

谢谢你的回复,让我的回答更简单。我已经完成了这些函数,但是除非我将show_frame(f3)命令分配给按钮,否则框架仍然不会切换。def show_frame(frame):frame.tkraise()def returnEntry():result=namentry.get()Label3.config(text=result)def WelcomeName():show_frame(f3)返回条目()我打赌你会得到一个AttributeError,对吧?因为Label3是None,不是Label实例。你需要将你的定义拆分为两行来修复它。我没有发现任何错误!这实际上让整个事情更加混乱哈哈。按下按钮2时帧f3不会上升。很抱歉,作为一个新手,这是唯一的改进方法!哦,在这种情况下,我猜你仍然有
lambda
在那里。参数需要简单地
command=returnEntry
。而且,你的
show_frame
函数是无用的,你可以通过直接调用tkrasie来摆脱它和lambda。例如:
按钮(f1,text='Click to Play',command=f2.tkraise)