私はtkinterを使って単純なチェスゲームを書いています。目的は、開始点と終了点をクリックしてPieces(オブジェクト)を移動することでした(座標移動先の座標、および目的地の座標)を表示します。しかし、私は、ボタンのテキストを更新して作品が移動したことを示すことはできないようです。私は多くの以前の回答/解決策を見てきましたが、ボード(視覚的表現)が8×8ボタンのバンクであるため、個々のボタンを個別に変更/選択する必要があります。チェスゲームで使用するためにtkinterボタンのテキストを更新する方法
ほとんどの場合、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のリストとしてゲーム内に設定されています
import game
from tkinter import *
from functools import partial
first=True
main=Tk()
main.title("TEST")
main.geometry("1000x1000")
buttonframe=Frame(main)
buttonframe.grid(row=0,column=0)
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 move(row,column):
global first
if first==True:
first=False
global startx
global starty
startx=row
starty=column
else:
endx=row
endy=column
first=True
game.board[startx][starty].move(endx,endy)
game.update(game.board,game.board_visual)
update()
def update():
index=0
for i in game.board_visual:
index2=0
for j in i:
buttontext.set(j)
index2=index2+1
index=index+1
main.mainloop()
グローバルのstartxとstartYとの使用は、私は最初の座標を保存することができますボタンがメインループの側に押し出されます。私はこれを行って、第2のボタンが押されたときに、私は移動機能のための2つの座標のセットを持つようにしました。
私はまだPythonとプログラミング一般に新しいので、私は間違って何をやっているのか分からない。私はあなたが私に与えることができるすべての助けに本当に感謝します。また、これは私の最初の質問を投稿するので、私は助言を読んだので、私は正しい場所にいることを願っています。この質問に問題がある場合は教えてください。それを修正しようとします。無関係なコードをいくつか削除する必要がありますか?たとえば、ボタンの色を白から黒に変えるビット。
短い答えは、はいです。ほとんどの場合、自己参照呼び出しで3次元のボタン配列を使用し、反対側の 'text'値をチェックして必要なアクションを判断する必要があります。しかし、これは私にとっては、このようなことのために実際には設計されていないtkinterライブラリの誤用のように思えますし、[Pygame](https:// www .pygame.org/news)。代替ライブラリを使用すれば、ずっと簡単に時間がかかるでしょう。 –
ありがとう、私はこれが私が望んでいた答えだとは言わないが、私は驚くことではない。私はパイゲームを調べます。再度、感謝します –