【问题标题】:How do I make time.sleep() work with tkinter?如何使 time.sleep() 与 tkinter 一起工作?
【发布时间】:2018-05-17 05:54:51
【问题描述】:

我正在尝试定期在屏幕上显示一系列数字。

我是 python 新手,所以这可能很明显,但我尝试过 .afterpygame.time.wait,但都没有成功。

这是代码:

from tkinter import*
from random import *
import time



my_list = []




def Create_NUM(event):
    x = 0

    for x in range(level + 2):
        button1.destroy()
        num = randint(1, 100)
        my_list.append(num)
        Label(root, text=num,fg="red").pack()
        one.pack()
        time.sleep(2)





root=Tk()

num = 0
level = 1
bottomFrame = Frame(root)
bottomFrame.pack(side=BOTTOM)

button1 = Button(bottomFrame, text="Click to start game",fg="red")
button1.bind("<Button-1>", Create_NUM)
button1.pack()



root.mainloop()

【问题讨论】:

  • 不要使用sleep() - 使用root.after(milliseconds, function_name, arguments) 而不是sleep()for 循环
  • 请记住,现在bind 使您的按钮仅在用鼠标单击时才起作用。您应该尝试使用command 选项以获得更标准的按钮使用方式。
  • 查看显示current time的示例
  • 这个网站上有几十个与定时器、睡眠和after 方法相关的问题。在问这个问题之前你有没有做过任何研究?

标签: python time tkinter


【解决方案1】:

我假设您想显示新号码来代替旧号码,而不是低于旧号码。

import tkinter as tk
import random

def start():
    # hide button
    button.pack_forget()
    # run `add_number` first time
    add_number(level+2)

def add_number(x):

    num = random.randint(1, 100)
    my_list.append(num)
    label['text'] = num

    if x > 0:
        # repeat after 2000ms (2s)
        root.after(2000, add_number, x-1)
    else:
        # show button again after the end
        button.pack()      

# --- main ---

my_list = []
level = 1

root = tk.Tk()

label = tk.Label(root)
label.pack()

button = tk.Button(root, text="Click to start game", command=start)
button.pack()

root.mainloop()

【讨论】:

    【解决方案2】:

    只需在你的函数root.update()中使用这个简单的命令

    【讨论】:

      猜你喜欢
      • 2019-12-09
      • 1970-01-01
      • 2021-12-07
      • 2019-04-17
      • 1970-01-01
      • 2012-05-10
      • 2013-02-17
      相关资源
      最近更新 更多