gpt4 book ai didi

python - 作为子流程倒计时的函数

转载 作者:太空宇宙 更新时间:2023-11-04 09:43:43 27 4
gpt4 key购买 nike

我在运行 Tkinter GUI 程序(问答游戏)时遇到问题。虽然用户可以选择 4 个按钮并且可以选择一个,但我需要一个倒计时计时器,当时间为零时它会改变问题。我需要它作为子进程或单独的线程,因为否则用户将无法选择答案。

这与有关计时器的其他问题不同,因为这些问题的答案包括 [Object] = threading.Timer(numCount, callback),但计时器在计数时不会返回其值。

有什么办法吗?我已经尝试了多种方法,包括线程模块和 pygame 时钟 (:D)。

最佳答案

多线程可能不是必需的:您可以使用 after 方法在时间过去后更改问题,同时保持 GUI 的响应性:

在以下示例中,问题每 10 秒更改一次。

import tkinter as tk


def countdown(t):
cdn['text'] = f'{t}'
if t > 0:
root.after(1000, countdown, t-1)


def change_question(idx):
lbl['text'] = questions[idx % 2]
root.after(10000, change_question, idx+1)
countdown(10)


def clickme(t):
print(f"{lbl['text']} : {t}")


if __name__ == '__main__':

questions = ['Is multi-threading necessary?', 'Is simple better than complicated?']
root = tk.Tk()
bt1 = tk.Button(root, text='Yes', command=lambda: clickme('Yes'))
bt2 = tk.Button(root, text='No', command=lambda: clickme('No'))
bt3 = tk.Button(root, text='Maybe', command=lambda: clickme('Maybe'))
bt4 = tk.Button(root, text='No Idea', command=lambda: clickme('No Idea'))
lbl = tk.Label(root, text='')
cdn = tk.Label(root, text='')
cdn.pack()

lbl.pack()
bt1.pack()
bt2.pack()
bt3.pack()
bt4.pack()
change_question(0)
root.mainloop()

示例输出:

Is multi-threading necessary? : No
Is simple better than complicated? : Yes

关于python - 作为子流程倒计时的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50663034/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com