tkinter同时使用两个键

时间:2016-09-21 01:08:32

标签: python tkinter keypress

因此tkinker一次只能使用一个密钥。 我无法说这个例子同时向左和向上移动。 如果我愿意,我该如何去做呢?

import tkinter
root = tkinter.Tk()
root.title('test')
c= tkinter.Canvas(root, height=300, width=400)
c.pack()
body = c.create_oval(100, 150, 300, 250, fill='green')

def key(event):
    OnKeyDown(event.char)
    print(event.char)

def MoveLeft(evenr)
    c.move(body, -10, 0)

def MoveRight(event):
    c.move(body, 10, 0)

def MoveUp(event):
    c.move(body, 0, 10)

def MoveDown(event):
    c.move(body, 0, -10)

root.bind('<KeyPress-Left>', MoveLeft)
root.bind('<KeyPress-Right>', MoveRight)
root.bind('<KeyPress-Up>', MoveUp)
root.bind('<KeyPress-Down>', MoveDown)

就我个人而言,我也更喜欢不必将我的键“绑定”到功能上,以及我也想使用键来预先形成其他动作(即:如果我保持移位和向上移动,则使其移动得更快时间)当您预先分配两个键或同时按住两个键时,可以进行修补吗?

1 个答案:

答案 0 :(得分:2)

像这样:

from Tkinter import *

root = Tk()
var = StringVar()
a_label = Label(root,textvariable = var ).pack()

history = []
def keyup(e):
    print e.keycode
    if  e.keycode in history :
        history.pop(history.index(e.keycode))

        var.set(str(history))

def keydown(e):
    if not e.keycode in history :
        history.append(e.keycode)
        var.set(str(history))

frame = Frame(root, width=200, height=200)
frame.bind("<KeyPress>", keydown)
frame.bind("<KeyRelease>", keyup)
frame.pack()
frame.focus_set()
root.mainloop()

不要忘记toggle keys,因为它有一点混合状态。