首页 > 解决方案 > 如何通过 tkinter 绑定传递更多参数

问题描述

如何通过 tkinter 的 bind 方法传递更多参数?
例如:

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)

当我运行第一个时,它说事件未定义

标签: pythontkinter

解决方案


您始终可以将回调函数包装在 lambda 中。

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

另一个选项是使用partialfromfunctool创建一个默认值key已经设置的函数。

from functools import partial

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

tk.bind('<Key>', moveShip_place)

推荐阅读