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
Post a Comment