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

时间:2018-06-08 16:53:25

标签: python tkinter

我想要输入一个'输入姓名'向用户输出欢迎消息的条目。我最近发布了如何在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")

对于草率代码等抱歉...

1 个答案:

答案 0 :(得分:2)

你做不到。您将必须创建一个第三个函数来调用您想要的两个函数,并将第三个函数赋予Button命令。

def on_click():
    do_thing_1()
    do_thing_2()

btn = Button(command=on_click)

我强烈建议您远离lambda,直到您知道它是如何工作的。

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

# 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")