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


i want swop tiles on board (in game fifteen) inputted keys. works up/down/right/left, not digit keys 1...9, though coordinates updated correctly within play() function, still doesn't seem move on board. full code is: http://pastebin.com/kvl2jf1g tips??

this key event:

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

now main part in play() changes string_vars in each label swops empty label (blankx,y coordinates empty space):

def play(i,j):     global blankx, blanky, game_running     if game_running:         # update vars if tile can 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 = 

this visualization , events:

for j, row in enumerate(board):     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 left/up/down         b.focus_set() 

in key() have stop checking board when made move.

now key() moves tile new place , still searching , finds same tile in new place , moves old place.

btw: seen text printed in console - see "pressed" twice.

you need return stop searching.

def key(event):     print(event.widget)     if event.char.isdigit():         j, row in enumerate(board):             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 

Comments

Popular posts from this blog

ruby - Trying to change last to "x"s to 23 -

jquery - Clone last and append item to closest class -

c - Unrecognised emulation mode: elf_i386 on MinGW32 -