当按下 <Key> 时忽略 <Button-1> Tkinter,Python

Ignoring <Button-1> when <Key> is pressed Tkinter, Python

我想通过输入的键交换棋盘上的牌(第十五局)。它非常适用于 up/down/right/left,但不适用于数字键 1...9,即使它们的坐标在我的 play() 函数中得到正确更新,它似乎仍然没有在板上移动。我的完整代码是:http://pastebin.com/KvL2JF1G 有什么提示吗??

这是我的关键事件:

def key(event):
    if event.char.isdigit():
        for j, row in enumerate(board):
            for i, char in enumerate(row):
                if char.get() == event.char:
                    print "pressed", repr(event.char),i, j
                    play(i,j)

现在的主要部分在 play() 中,它改变了每个与空标签交换的标签中的 string_vars(blankx,y 是空 space 的坐标):

def play(i,j):
    global blankx, blanky, game_running
    if game_running:
        # update vars if tile can be moved
        if (blankx, blanky) in [(i+1,j),(i-1,j),(i,j+1),(i,j-1)]:
            board[blanky][blankx].set(board[j][i].get())
            board[j][i].set(' ')

            blanky = j
            blankx = i

这适用于所有可视化和事件:

for j, row in enumerate(board):
    for i, string_var in enumerate(row):
        b = Label(frame, textvariable=string_var, bg='pink', width=2, height=1, font=("Times", 30, 'bold'), relief=RAISED)  
        b.grid(row=j, column=i, sticky="nsew", ipadx=8, padx=4, pady=4)
        b.bind('<Button-1>',lambda e, i=i,j=j:play(i,j))
        b.bind('<Key>', key)
        b.bind('<Right>', right_Key)
        # ... same function for left/up/down
        b.focus_set()

key()中,您必须在移动时停止检查棋盘。

现在 key() 将图块移动到新位置,然后它仍在搜索并在新位置找到相同的图块并将其移动到旧位置。

顺便说一句:看到控制台中打印的文本 - 你看到 "pressed" 两次。

您需要 return 才能停止搜索。

def key(event):
    print(event.widget)
    if event.char.isdigit():
        for j, row in enumerate(board):
            for i, char in enumerate(row):
                if char.get() == event.char:
                    print "pressed", repr(event.char),i, j, blankx,blanky
                    play(i,j)
                    return # stop searching