Нужно поменять местами объекты в tkinter

Рейтинг: 0Ответов: 0Опубликовано: 03.05.2023

Нужно поменять местами объекты (прямоугольники) в tkinter. Сделал вывод позиций в консоли, они меняются, но именно в окне не происходит изменений. Наверное стоит как-то обновлять окно при каждом вызове функции swap_column.

from tkinter import *
from tkinter import filedialog
class BubbleSort:
  # ...
class Graphics:
      def column_width(self):
        self._column_width = 1250 // len(self._list_to_sort)

    def column_height(self):
        self._max_column_height = 650
        self._column_height = self._list_to_sort[:]

        self._max_number = max(self._list_to_sort)
        self._column_height[self._column_height.index(self._max_number)] = str(self._max_column_height)

        for i in range(len(self._column_height)):
            if self._column_height[i] != "650":
                self._column_height[i] = int(self._column_height[i] / self._max_number * self._max_column_height)

        self._column_height[self._column_height.index(str(self._max_column_height))] = self._max_column_height

    def draw_data(self):
        self._x = 10
        self._columns = []
        for i in range(len(self._list_to_sort)):
            self._column = cn.create_rectangle(
                (self._x, 720 - self._column_height[i], self._x + self._column_width, 720), fill="#2a5fff")
            self._columns.append(self._column)
            self._x += self._column_width + 1
        print(self._columns)

    def swap_column(self, pos_1, pos_2):
        self._x_00, self._y_00, self._x_01, self._y_01 = cn.coords(pos_1)
        self._x_10, self._y_10, self._x_11, self._y_11 = cn.coords(pos_1)

        cn.move(pos_1, self._x_10 - self._x_00, 0)
        cn.move(pos_2, self._x_01 - self._x_11, 0)

    def bubble_sort_animate(self):
        for j in range(len(self._list_to_sort) - 1, 0, -1):
            for i in range(0, j):
                if self._list_to_sort[i] > self._list_to_sort[i + 1]:
                    pos_1 = self._columns[i]
                    pos_2 = self._columns[i + 1]
                    self.swap_column(pos_1, pos_2)
                    self._columns[i], self._columns[i + 1] = self._columns[i + 1], self._columns[i]
                    self._list_to_sort[i], self._list_to_sort[i + 1] = self._list_to_sort[i + 1], self._list_to_sort[i]
                

bubble_sort_app = BubbleSortApp()

window = Tk()
window.title("Sort Animation")
window.geometry("1280x720")

menu = Menu()
menu.add_cascade(label="File", command=bubble_sort_app.open_file)
menu.add_cascade(label="Animate", state="disabled")
menu.add_cascade(label="About", command=bubble_sort_app.menu_about)
menu.add_cascade(label="Exit", command=quit)

cn = Canvas(window, width=1280, height=720, background="#1c1c1c")

window.config(menu=menu)
cn.pack()
window.mainloop()

Ответы

Ответов пока нет.