Я пытаюсь создать простой визуализатор сортировки в Python, используя Tkinter
.Учитывая это, я хотел бы, чтобы пользователь мог видеть изменения, которые происходят в каждой итерации алгоритма сортировки (какой бы алгоритм ни использовался), и для этого я должен «приостановить» программу для пользователя.чтобы увидеть изменения каждый тик.
Это "пауза" часть, которая смущает меня.Я посмотрел на time.sleep
, который не имеет отношения к программам с графическим интерфейсом (из-за mainloop) и after()
в библиотеке Tkinter, но я не могу понять, что это правильно.
Мой код:
arr = [random.randint(0,600) for i in range(100)]
WIN_WIDTH = 1200
WIN_HEIGHT = 800
BAR_NUM = len(arr)
BAR_WIDTH = WIN_WIDTH // BAR_NUM
class sortVisualizer(tk.Frame):
def __init__(self, master=None):
super().__init__(master)
canvas = tk.Canvas(root,width=WIN_WIDTH,height=WIN_HEIGHT)
self.draw(canvas)
canvas.pack()
queue = [self.bubbleSort(canvas)] //theres going to be more than just one sorting algorithm
queue[0]
def re_draw(self,canvas,index1,index2):
canvas.delete("all")
temp = arr[index1]
arr[index1] = arr[index2]
arr[index2] = temp
for i in range(BAR_NUM):
canvas.create_rectangle(BAR_WIDTH * i,
WIN_HEIGHT - arr[i],
BAR_WIDTH * (i+1),
WIN_HEIGHT,
fill = "white")
canvas.pack()
def bubbleSort(self,canvas):
for item in range(len(arr)-1,0,-1):
for i in range(item):
if (arr[i] > arr[i+1]):
self.re_draw(canvas,i,i+1)
В классе sortVisualizer
есть еще несколько функций, но они не имеют значения.
Итак, мой вопрос: как я смогу "приостановить" или "остановить" программу, чтобы пользователь мог видеть изменения в каждом тике?