首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >python中同一个函数的多次调用

python中同一个函数的多次调用
EN

Stack Overflow用户
提问于 2017-12-11 19:49:32
回答 3查看 1.2K关注 0票数 1

我试图用tkinter库在python中编写简单的GUI游戏。我想要生成随机数,每一代之后我都想删除这个数字。我把我的函数放入一个for循环中,所以我想调用它3次,但是当我首先调用它时,它就工作了。它生成数字,然后删除它,不再生成新的数字。请你解释一下问题出在哪里,我对python真的很陌生。

代码语言:javascript
复制
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()
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-12-11 20:11:04

after()只执行一次函数,并且运行一些不使用after()再次执行函数的lambda。最好在(2000, blink)之后和blink内部计算它被执行了多少次

编辑:您可以在after()中使用两个函数

blink将使用after调用removeremove将使用after调用blink

这样,您就可以使用它两个不同的时间来显示和隐藏数字。

代码语言:javascript
复制
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()
票数 1
EN

Stack Overflow用户

发布于 2017-12-11 20:44:51

另一种方法是构建要显示的值列表,然后逐个显示它们:

代码语言:javascript
复制
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()
票数 2
EN

Stack Overflow用户

发布于 2017-12-11 20:15:27

见下面的例子:

代码语言:javascript
复制
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后递归地调用自己,从而删除该数字。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47760319

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档