Python 如何更新国际象棋游戏中使用的tkinter按钮的文本?

Python 如何更新国际象棋游戏中使用的tkinter按钮的文本?,python,tkinter,chess,Python,Tkinter,Chess,我正在用tkinter写一个简单的国际象棋游戏。其目的是通过单击开始和结束正方形(选择要移动的工件的坐标和目标的坐标)来移动工件(对象)。然而,我似乎无法更新按钮的文本,以显示片段已移动。我已经看过很多以前的答案/解决方案,但是大多数都要求每个按钮都要单独更改/选择,而我不能这样做,因为电路板(视觉表示)是一组8×8的按钮 大多数人建议使用tkinters StringVar(),但我似乎无法让它正常工作 我想我的问题是,移动后如何更新按钮 ['WR', 'WN', 'WB', 'WK', 'W

我正在用tkinter写一个简单的国际象棋游戏。其目的是通过单击开始和结束正方形(选择要移动的工件的坐标和目标的坐标)来移动工件(对象)。然而,我似乎无法更新按钮的文本,以显示片段已移动。我已经看过很多以前的答案/解决方案,但是大多数都要求每个按钮都要单独更改/选择,而我不能这样做,因为电路板(视觉表示)是一组8×8的按钮

大多数人建议使用tkinters StringVar(),但我似乎无法让它正常工作

我想我的问题是,移动后如何更新按钮

['WR', 'WN', 'WB', 'WK', 'WQ', 'WB', 'WN', 'WR'] row 1
['WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP']
[None, None, None, None, None, None, None, None]
[None, None, None, None, None, None, None, None]
[None, None, None, None, None, None, None, None]
[None, None, None, None, None, None, None, None]
['BP', 'BP', 'BP', 'BP', 'BP', 'BP', 'BP', 'BP']
['BR', 'BN', 'BB', 'BK', 'BQ', 'BB', 'BN', 'BR'] row 7
Board_visual在游戏中设置为2d列表,如下所示(如上所示):

使用全局startx和starty允许我存储主回路外侧按下的第一个按钮的坐标。我这样做是为了当按下第二个按钮时,我有移动功能的两组坐标


我对python和编程还是个新手,所以我不确定自己做错了什么。我真的很感激你能给我的任何帮助。这也是我第一次发布一个问题,所以我已经阅读了建议,所以我希望我在正确的地方。如果这个问题有问题,请告诉我,我会尽力纠正。我应该删掉一些不相关的代码吗?e、 g导致按钮颜色从白色变为黑色的位。

我发现的一个解决方案是创建一个函数来更改按钮,并在每次移动后调用它。这是有效的;但是,我认为它创建了新的按钮,而不是更改现有的按钮,这可能是一个糟糕的解决方案。我会把代码贴在这里,以防有人觉得有用

def button_text_change():
    index=0
    colour="white"
    for i in game.board_visual:
        index2=0
        for j in i:
            if j==None:
                j=""
            buttontext=StringVar()
            buttontext.set(j)
            Button(buttonframe, textvariable=buttontext,fg="red",command=lambda row=index,column=index2: move(row,column),font=30, width=10,height=2,bg=colour,).grid(row=index, column=index2, sticky=W)
            if colour=="white":
                colour="black"
            elif colour=="black":
                colour="white"
            index2=index2+1
        if colour=="white":
            colour="black"
        elif colour=="black":
            colour="white"
        index=index+1 

我发现的一个解决方案是创建一个函数来更改按钮,并在每次移动后调用它。这是有效的;但是,我认为它创建了新的按钮,而不是更改现有的按钮,这可能是一个糟糕的解决方案。我会把代码贴在这里,以防有人觉得有用

def button_text_change():
    index=0
    colour="white"
    for i in game.board_visual:
        index2=0
        for j in i:
            if j==None:
                j=""
            buttontext=StringVar()
            buttontext.set(j)
            Button(buttonframe, textvariable=buttontext,fg="red",command=lambda row=index,column=index2: move(row,column),font=30, width=10,height=2,bg=colour,).grid(row=index, column=index2, sticky=W)
            if colour=="white":
                colour="black"
            elif colour=="black":
                colour="white"
            index2=index2+1
        if colour=="white":
            colour="black"
        elif colour=="black":
            colour="white"
        index=index+1 

简而言之,是的,这是可能的。您很可能需要使用带有自引用调用的3D按钮数组,然后检查另一侧的
文本
值,以确定所需的操作。但对我来说,这听起来像是对tkinter库的滥用,tkinter库并不是专门为这类事情设计的,还有更适合游戏设计的Python库,例如。你可能会有一个更容易的时间使用另一个图书馆。谢谢,我不会说这是我所希望的答案,但我并不感到惊讶。我会调查这个游戏的。再次感谢。简短的回答是,是的,这是可能的。您很可能需要使用带有自引用调用的3D按钮数组,然后检查另一侧的
文本
值,以确定所需的操作。但对我来说,这听起来像是对tkinter库的滥用,tkinter库并不是专门为这类事情设计的,还有更适合游戏设计的Python库,例如。你可能会有一个更容易的时间使用另一个图书馆。谢谢,我不会说这是我所希望的答案,但我并不感到惊讶。我会调查这个游戏的。再次感谢