我对python非常陌生,我正试图用tkinter编写一个基本游戏,让我通过点击数字键来选择数字1-4,然后它将接受与该键相关的随机数变量,然后在屏幕上显示随机数。我有显示部分和按键部分向下,但我想知道我应该如何强迫球员等待,然后他们可以显示更多的文字。
这个问题也与问题无关,但它与游戏有关。我如何销毁我放在画布上的文字,这样我就可以在画布上放一个不同的地方。在这里输入图像描述
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)发布于 2021-05-10 18:57:41
您需要运行tk.mainloop()才能正确地将控制移交给GUI。
要获得某些doGame操作后所需的延迟,需要调用另一个“清理”函数,该函数稍后由canvas.after函数指定。这也可以用来重置动作消息,因此它自然会落到同一个函数来初始化,这可以将键按下绑定到doGame函数。
要从屏幕中删除文本,您需要在创建小部件时保留小部件的id,然后使用.delete。这是通过在prompt列表中保留ID来完成的。
消息暂停期间的解除绑定事件可以减少屏幕混乱,但需要在清理期间重新绑定。如果您注释掉.unbind行,您可能会在彼此之间覆盖很多消息(&这就是为什么我将prompt作为列表)。
抽样实施情况:
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()发布于 2021-05-10 19:56:14
要在执行下一行代码之前创建时间延迟,可以使用时间模块睡眠函数:
import time
time.sleep(3.0)
# program will wait 3 seconds then prints:
print("3 seconds")https://stackoverflow.com/questions/67475842
复制相似问题