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

标签 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")

抱歉,代码马虎等...

最佳答案

你不能。您必须创建一个第三个函数来调用您想要的两个函数,并将该第三个函数提供给 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")

关于python - Tkinter:如何通过函数将两个命令分配给一个按钮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50765266/

相关文章:

python - 使用 StringVar 的跟踪条目对标签没有影响

python - 为什么 pygame.event.get() 每帧只能调用一次

带有networkx的图形的python计算错误

python - 比较大量图的同构性

python - MySQL 并锁定一个表,读取,然后截断

python - Tkinter 下拉菜单和 MySql 数据库输入

python - 帮助处理 python Entry 小部件中的 <key> 事件

python - 与 Tkinter 应用程序一起运行循环

python - 如何计算一列值与另一列中的 jsons 值列表之间的差异,并因此创建 2 个新列?

python - 读取串行输入并打印到 Tkinter GUI