我试图用tkinter库在python中编写简单的GUI游戏。我想要生成随机数,每一代之后我都想删除这个数字。我把我的函数放入一个for循环中,所以我想调用它3次,但是当我首先调用它时,它就工作了。它生成数字,然后删除它,不再生成新的数字。请你解释一下问题出在哪里,我对python真的很陌生。
from tkinter import *
from random import*
def blink():
number.config(text=randint(1,10))
number.after(2000, lambda: number.config(text=' '))
root = Tk()
number = Label(root,width=20,height=10)
number.pack()
for i in range(3):
blink()
root.mainloop()发布于 2017-12-11 20:11:04
after()只执行一次函数,并且运行一些不使用after()再次执行函数的lambda。最好在(2000, blink)之后和blink内部计算它被执行了多少次
编辑:您可以在after()中使用两个函数
blink将使用after调用remove,remove将使用after调用blink。
这样,您就可以使用它两个不同的时间来显示和隐藏数字。
import tkinter as tk
from random import randint
def blink():
number.config(text=randint(1,10))
number.after(2000, remove)
def remove():
global repeat
number.config(text='')
repeat -= 1
if repeat > 0:
number.after(2000, blink)
repeat = 3
root = tk.Tk()
number = tk.Label(root, width=20, height=10)
number.pack()
blink()
root.mainloop()发布于 2017-12-11 20:44:51
另一种方法是构建要显示的值列表,然后逐个显示它们:
from tkinter import *
from random import*
display = ['', randint(1,10), '', randint(1,10), '', randint(1,10)]
def blink():
if display:
number.config(text=display.pop())
number.after(2000, blink)
root = Tk()
number = Label(root,width=20,height=10)
number.pack()
blink()
root.mainloop()发布于 2017-12-11 20:15:27
见下面的例子:
import tkinter as tk
import random
def blink():
if lbl['text']:
lbl['text'] = ''
else:
lbl['text'] = random.randint(1, 10)
lbl.after(1000, blink)
root = tk.Tk()
lbl = tk.Label(root)
lbl.pack()
tk.Button(root, text="button", command=blink).pack()
root.mainloop()当按下按钮时,它会生成一个随机数(如果还没有),如果已经有一个,它会删除这个数字。
如果函数生成新的数字,则函数在1s后递归地调用自己,从而删除该数字。
https://stackoverflow.com/questions/47760319
复制相似问题