首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >键击延迟

键击延迟
EN

Stack Overflow用户
提问于 2021-05-10 18:29:50
回答 2查看 120关注 0票数 0

我对python非常陌生,我正试图用tkinter编写一个基本游戏,让我通过点击数字键来选择数字1-4,然后它将接受与该键相关的随机数变量,然后在屏幕上显示随机数。我有显示部分和按键部分向下,但我想知道我应该如何强迫球员等待,然后他们可以显示更多的文字。

这个问题也与问题无关,但它与游戏有关。我如何销毁我放在画布上的文字,这样我就可以在画布上放一个不同的地方。在这里输入图像描述

代码语言:javascript
复制
import random
import time
tk = Tk()

number1 = (random.randint(0, 3))
number2 = (random.randint(0,3))
number3 = (random.randint(0,3))
number4 = (random.randint(0,3))

canvas = Canvas(tk, width=500, height=500)
canvas.pack()
canvas.create_text(250, 150, text="Press the keys 1, 2, or 3",font=('Arial', 20))

def doGame(event):
 if event.keysym == '1':
  canvas.create_text(250, 250, text=number1,font=('Arial',20))
 elif event.keysym == '2':    
  canvas.create_text(250, 250, text=number2,font=('Arial',20))
 elif event.keysym == '3':
  canvas.create_text(250, 250, text=number3,font=('Arial',20))
 elif event.keysym == '4':
  canvas.create_text(250, 250, text=number4,font=('Arial',20))
for i in range(0, 100000):
 canvas.bind_all('<KeyPress-1>', doGame)
 canvas.bind_all('<KeyPress-2>', doGame)
 canvas.bind_all('<KeyPress-3>', doGame)
 canvas.bind_all('<KeyPress-4>', doGame)
EN

回答 2

Stack Overflow用户

发布于 2021-05-10 18:57:41

您需要运行tk.mainloop()才能正确地将控制移交给GUI。

要获得某些doGame操作后所需的延迟,需要调用另一个“清理”函数,该函数稍后由canvas.after函数指定。这也可以用来重置动作消息,因此它自然会落到同一个函数来初始化,这可以将键按下绑定到doGame函数。

要从屏幕中删除文本,您需要在创建小部件时保留小部件的id,然后使用.delete。这是通过在prompt列表中保留ID来完成的。

消息暂停期间的解除绑定事件可以减少屏幕混乱,但需要在清理期间重新绑定。如果您注释掉.unbind行,您可能会在彼此之间覆盖很多消息(&这就是为什么我将prompt作为列表)。

抽样实施情况:

代码语言:javascript
复制
canvas = Canvas(tk, width=500, height=500)
canvas.pack()

number1 = (random.randint(1,8))
number2 = (random.randint(1,8))*10
number3 = (random.randint(1,8))*100
number4 = (random.randint(1,8))*1000

prompt = []
gameDisplay = {'1':number1, '2':number2, '3':number3, '4':number4 } # info for various keys

def startScreen():
    while len(prompt) > 0:
        canvas.delete(prompt.pop()) # release ID, clear text 
    prompt.append(canvas.create_text(250, 150, text="Press the keys 1, 2, or 3",font=('Arial', 20)))
    tk.bind("<Key>", doGame)

def doGame(event):
    ch = event.char
    canvas.delete(prompt[0])
    dText = 'pressed '+ch
    if ch in gameDisplay:
        dText += ' value '+str(gameDisplay[ch])
    prompt.append(canvas.create_text(250, 250, text=dText, font=('Arial',20)))
    tk.unbind("<Key>") # ignore keys until...
    canvas.after(1000,startScreen) # wait 1000ms then run this fuction

startScreen()
tk.mainloop()
票数 1
EN

Stack Overflow用户

发布于 2021-05-10 19:56:14

要在执行下一行代码之前创建时间延迟,可以使用时间模块睡眠函数:

代码语言:javascript
复制
import time


time.sleep(3.0)
# program will wait 3 seconds then prints:
print("3 seconds")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67475842

复制
相关文章

相似问题

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