Tkinter棋盘游戏

时间:2019-02-02 11:29:23

标签: python tkinter

我正在与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是它在网格上的位置

它可以与一个棋子配合使用,但是当有两个棋子时,就像数字一样 行和列的变化,并且典当有时落在错误的位置: enter image description here

是否有解决方法,还是需要采取完全不同的方法?

1 个答案:

答案 0 :(得分:1)

您的方法是错误的。有很多需要改进的地方,例如在GUI应用程序中使用睡眠是绝对禁止的。

但是对于眼前的问题,您只是使用了错误的抽象。网格用于以规则的间距布局创建小部件。但不适用于堆叠/重新排列它们。可以做到,但我建议不要这样做。

改为使用画布。这样一来,您就可以简单地覆盖图形元素,甚至四处移动(如果您如此倾斜,则可以平滑地移动它们)。