저는 tkinter를 사용하여 간단한 체스 게임을 쓰고 있습니다. 목표는 시작과 끝 사각형을 클릭하여 Pieces (개체)를 이동하는 것입니다 (좌표 이동하려는 조각과 목적지의 좌표). 그러나 나는 조각이 움직 였다는 것을 보여주기 위해 단추의 텍스트를 업데이트 할 수있는 것 같지 않습니다. 이전 답변/솔루션을 많이 보았습니다. 그러나 보드 (시각적 표현)가 8 x 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 (위)과 같이하는 2 차원 목록으로 게임에서 설정 :
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의 사용은 나를 처음의 좌표를 저장할 수 버튼을 메인 루프의 측면 밖으로 밀었습니다. 두 번째 버튼을 누를 때 나는 move 함수에 대해 두 세트의 좌표를 갖도록이 작업을 수행했습니다.
저는 아직 파이썬과 프로그래밍에 익숙하지 않으므로 잘못하고있는 것이 확실하지 않습니다. 네가 나에게 줄 수있는 도움에 정말 감사한다. 또한 이것은 처음으로 질문을 게시하는 것이므로 조언을 읽었으므로 올바른 장소에 있기를 바랍니다. 이 질문에 문제가있는 경우 알려 주시면 수정하도록 노력하겠습니다. 관련없는 코드를 잘라야합니까? 예를 들어, 버튼의 색상을 흰색에서 검은 색으로 번갈아 버리는 비트.
짧은 대답은 가능합니다. 대부분의 경우 자체 참조 호출과 함께 3D 버튼 배열을 사용하고 다른 측면에서 'text'값을 확인하여 필요한 조치를 결정해야합니다. 그러나 이것은 내게는 이런 종류의 것을 위해 정말로 설계되지 않은 tkinter 라이브러리의 오용과 같은데, [Pygame] (https : // www)와 같이 게임 디자인을 목적으로하는 파이썬 라이브러리가 더 적합합니다. .pygame.org/news). 대체 라이브러리를 사용하면 훨씬 쉽고 편리합니다. –
감사합니다. 나는 이것이 내가 원하는 바가 아니라 놀라지 않는다고 말하지 않을 것입니다. 나는 파이 게임을 살펴볼 것이다. 다시 한 번 감사드립니다. –