我正在与Tkinter进行棋盘游戏。我创建一个网格:
def create_grid(self):
self.grid_frame = Frame(window)
self.grid_frame.grid(row=1, column=0)
self.grid_picture = PhotoImage(file="grid.PNG")
self.grid_label = Label(self.grid_frame, image=self.grid_picture)
self.grid_label.grid(row=0, column=0, columnspan=100, rowspan=10)
然后从一开始就根据棋子的位置放置棋子:
def green_grid_translation(self, green_position):
if green_position < 10:
self.green_grid_row = 9
self.green_grid_column = green_position*10+2
elif green_position < 20:
self.green_grid_row = 8
self.green_grid_column = 92 - (green_position - 10)*10
将棋子放置在与网格相同的框架上,并且每次移动都再次创建框架:
def position_interface(self):
self.grid_frame = Frame(window)
self.grid_frame.grid(row=1, column=0)
self.grid_picture = PhotoImage(file="grid.PNG")
self.grid_label = Label(self.grid_frame, image=self.grid_picture)
self.grid_label.grid(row=0, column=0, columnspan=100, rowspan=10)
self.green_picture = PhotoImage(file="green.png")
self.green_symbol = Label(self.grid_frame, image=self.green_picture)
self.green_symbol.grid(row=self.green_grid_row, column=self.green_grid_column)
self.blue_picture = PhotoImage(file="blue.png")
self.blue_symbol = Label(self.grid_frame, image=self.blue_picture)
self.blue_symbol.grid(row=self.blue_grid_row, column=self.blue_grid_column)
以下循环使它们逐步进行:
for x in reversed(range(green_change[0])):
run_grid.green_grid_translation(green_change[1] - x)
run_grid.blue_grid_translation(blue_change[1])
run_grid.position_interface()
window.update()
sleep(1)
for x in reversed(range(blue_change[0])):
run_grid.green_grid_translation(green_change[1])
run_grid.blue_grid_translation(blue_change[1] - x)
run_grid.position_interface()
window.update()
sleep(1)
green_change [0]是典当应该移动的步数, green_change 1是它在网格上的位置
它可以与一个棋子配合使用,但是当有两个棋子时,就像数字一样 行和列的变化,并且典当有时落在错误的位置:
是否有解决方法,还是需要采取完全不同的方法?
答案 0 :(得分:1)
您的方法是错误的。有很多需要改进的地方,例如在GUI应用程序中使用睡眠是绝对禁止的。
但是对于眼前的问题,您只是使用了错误的抽象。网格用于以规则的间距布局创建小部件。但不适用于堆叠/重新排列它们。可以做到,但我建议不要这样做。
改为使用画布。这样一来,您就可以简单地覆盖图形元素,甚至四处移动(如果您如此倾斜,则可以平滑地移动它们)。