Как передать больше аргументов через tkinter bind - PullRequest
0 голосов
/ 03 ноября 2019

Как я могу передать больше аргументов через метод связывания tkinter?
для примера:

tk = Tk()
def moveShip(event,key):
    if event.keysym == 'Down' and player1.selectedCoord[1] != 9:
        if key == 'place':
            player1.selectedCoord[1] += 1
    elif event.keysym == 'Up' and player1.selectedCoord[1] != 0:
        if key == 'place':
            player1.selectedCoord[1] -= 1
    elif event.keysym == 'Left' and player1.selectedCoord[0] != 0:
        if key == 'place':
            player1.selectedCoord[0] -= 1
    elif event.keysym == 'Right' and player1.selectedCoord[0] != 9:
        if key == 'place':
            player1.selectedCoord[0] += 1

tk.bind("<Key>", command=moveShip(event,'place'))

вместо

tk.bind("<Key>", moveship)

при запуске первого, он говоритсобытие не определено

1 Ответ

0 голосов
/ 03 ноября 2019

Вы всегда можете заключить функцию обратного вызова в лямбду.

tk.bind('<Key>', lambda event: moveShip(event, 'place'))

Другой вариант - использовать partial из functool, чтобы создать функцию со значением по умолчанию key, которое уже установлено.

from functools import partial

moveShip_place = partial(moveShip, key='place')

tk.bind('<Key>', moveShip_place)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...