如何捕捉两个关键事件的Tkinter

所以我做小泛出的Tkinter做作的比赛,我面临wall.Compiler只抓住了一个关键事件,如果第二用户按下按键,1用户运动LL停止。你们知道如何解决这个问题吗?如何捕捉两个关键事件的Tkinter

这里是代码:

from tkinter import* 

w=600

h=300

padis_sigane=10

padis_sigrdze=75

padis_sichqare=5

root=Tk()

root.geometry("{}x{}".format(w,h))

root.resizable(False,False)

c=Canvas(root,width=w,height=h,bg="green")

c.create_line(w//2,0,w//2,h,width=10,fill="white")

c.create_line(padis_sigane,0,padis_sigane,h,width=2,fill="white")

c.create_line(w-padis_sigane,0,w-padis_sigane,h,width=2,fill="white")

c.create_oval(w//2-w//30,h//2-w//30,w//2+w//30,h//2+w//30,fill="white",outline="white")

class chogani:

def __init__(self,x,y):

self.x=x

self.y=y

self.pad=c.create_rectangle(self.x,self.y,self.x+padis_sigane,self.y+padis_sigrdze,fill="lightblue",outline="white")

def shxuili(self):

if c.coords(self.pad)[3]>=h:

c.coords(self.pad,self.x,h-padis_sigrdze,self.x+padis_sigane,h)

elif c.coords(self.pad)[1]<=0:

c.coords(self.pad,self.x,0,self.x+padis_sigane,padis_sigrdze)

x=0;y=0 #Momavalshi

pad1=chogani(0,1)

pad2=chogani(w-padis_sigane,1)

def K(event):

pad1.shxuili()

pad2.shxuili()

if event.keysym=='w':

c.move(pad1.pad,0,-padis_sichqare)

elif event.keysym=='s':

c.move(pad1.pad,0,padis_sichqare)

elif event.keysym=='Up':

c.move(pad2.pad,0,-padis_sichqare)

elif event.keysym=='Down':

c.move(pad2.pad,0,padis_sichqare)

def R(event):

print("shen aushvi ", event.char)

root.bind("<KeyPress>",K)

root.bind("<KeyRelease>",R)

root.focus_set()

c.pack()

root.mainloop()

回答:

在其他模块 - 像PyGame - 您使用的变量,比如和up_pressed = True/False被按下或释放键,当你改变。接下来创建mainloop来做这个变量来移动物体。由于tkinter早已mainloop所以你可以用after()执行定期自身的功能,这将检查w_pressed/up_pressed和移动对象。

简单(工作)例如:

它检查wup和显示True/False为两个键。

import tkinter as tk 

# --- functions ---

def pressed(event):

global w_pressed

global up_pressed

if event.keysym == 'w':

w_pressed = True

elif event.keysym == 'Up':

up_pressed = True

def released(event):

global w_pressed

global up_pressed

if event.keysym == 'w':

w_pressed = False

elif event.keysym == 'Up':

up_pressed = False

def game_loop():

# use keys

print(w_pressed, up_pressed)

# run again after 500ms

root.after(500, game_loop)

# --- data ---

w_pressed = False

up_pressed = False

# --- main ---

root = tk.Tk()

root.bind("<KeyPress>", pressed)

root.bind("<KeyRelease>", released)

# start own loop

game_loop()

root.mainloop()

以上是 如何捕捉两个关键事件的Tkinter 的全部内容, 来源链接: utcz.com/qa/261115.html

回到顶部