当按下 <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
我想通过输入的键交换棋盘上的牌(第十五局)。它非常适用于 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