Нужно поменять местами объекты в tkinter
Нужно поменять местами объекты (прямоугольники) в 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()
Источник: Stack Overflow на русском