为tkin中的按钮赋值

2024-06-16 14:20:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在写一个象棋程序,每个方块都是一个按钮。现在,我正在编写一个命令,使工件能够移动(单击时执行),但它告诉我单击时缺少一个参数(squareposition

如何将值绑定到Game.movepiece中的每个按钮? 下面是我用来创建按钮的代码:

def drawboard(self):

    x=0
    y=0
    for column in range(self.n):
        self.changecolours()
        x=x+1
        y=0
        for row in range(self.n):
            y=y+1
            colour = self.colours[self.colourindex]
            position=(x,9-y)
            buttons=(tk.Button(self.boardframe, padx=10,  text=self.placepieces(position),  bg=colour,  borderwidth=2,  relief="solid", font=self.piecefont, command=lambda:Game.movepiece(position)  ))
            buttons.grid(column=(x-1), row=(y-1), sticky="W"+"E"+"N"+"S" )
            self.changecolours()

这是按钮的命令功能:

    def movepiece(self, squareposition):
        if self.square==(-10,-10):
            self.square=squareposition

Tags: in命令selfgamefordefpositionrange
1条回答
网友
1楼 · 发布于 2024-06-16 14:20:27

Game.movepiece(position)在类级别调用方法,因此position用于self参数,然后squareposition丢失。您需要使用Game的实例才能正确调用该方法。也许您已经在代码的其他地方实例化了它

然后正如@Reblochon Masque所说的,您可以用command=lambda pos=position :self.movepiece(pos)替换命令

def __init__():
    self.game = Game()

def drawboard(self):
    [...]
    position = (x,9-y)
    buttons = tk.Button(self.boardframe, padx=10,  text=self.placepieces(position),  
             bg=colour,  borderwidth=2,  relief="solid", font=self.piecefont, 
             command=lambda pos=position :self.movepiece(pos))

相关问题 更多 >