如何在单击tkinter按钮之前暂停代码执行?

时间:2019-11-21 00:21:15

标签: python python-3.x tkinter

我设置了一个tkinter按钮,用于将一个字符串发送到一个空列表,以便在计算机随机选择另一个字符串之间进行比较。一切工作正常,除了下面的代码处理以前的空列表之前,我可以单击tkinter按钮。我知道这是一种编程剪刀石头布游戏的怪异方法。发生的是,当单击“摇滚”按钮时,字符串“摇滚”被发送到一个空列表进行存储。然后,计算机从石头,纸和剪刀这三根弦中选择一根。将该字符串放入另一个空列表进行存储,然后立即与tkinter按钮中存储的第一个字符串进行比较。这将使我能够确定谁赢了或是否平局。

var daysTravel = 0
for people in peopleTravelling
{
   daysTravel += people.daysOnTrip
}

1 个答案:

答案 0 :(得分:1)

GUI中的

Button不会等到您按下它。它仅定义显示窗口的mainloop()应显示的窗口小部件。 Button之后的所有代码都立即执行-甚至在您看到窗口之前。

您的问题是您为按钮分配了无用的lambda,但您应该分配功能来检查计算机的选择与用户的选择。

import tkinter as tk
import random

# --- functions ---

def check(user):
    computer = random.choice(rps)
    print(user, computer)

    if user == computer:
        print("Draw!")
    else:
        print("Nothing")

# --- main ---

rps = ["Rock", "Paper", "Scissors"]

root = tk.Tk()

button = tk.Button(root, text="Rock", command=lambda:check("Rock"))
button.pack()

button_2 = tk.Button(root, text="Paper", command=lambda:check("Paper"))
button_2.pack()

button_3 = tk.Button(root, text="Scissors", command=lambda:check("Scissors"))
button_3.pack()

root.mainloop() # start program