按下<key>时忽略<button-1> Tkinter,Python

时间:2016-01-07 14:47:38

标签: python user-interface button tkinter visualization

我想通过输入的按键在我的棋盘上(在游戏十五中)翻转牌。它适用于上/下/右/左,但不适用于数字键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是空白空间的坐标):

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()

1 个答案:

答案 0 :(得分:0)

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