[英]Tkinter board game
我正在与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是它在网格上的位置
单个典当效果很好,但是当有两个典当时,就像行和列的数量发生了变化,典当有时会落在错误的位置:
有没有办法解决它,还是我需要采取一种完全不同的方法?
您的方法是错误的。 有很多需要改进的地方,例如,在GUI应用程序中使用睡眠是绝对禁止的。
但是对于眼前的问题,您只是使用了错误的抽象。 网格用于以规则的间距布局创建小部件。 但不适用于堆叠/重新排列它们。 可以做到,但我建议不要这样做。
改用画布。 这使您可以简单地覆盖图形元素,甚至四处移动(如果您如此倾斜,则可以平滑地进行!)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.