[英]Pausing a GUI Python program
我正在尝试使用Tkinter
在 python 中创建一个简单的排序可视化工具。 话虽如此,我希望用户能够看到排序算法(无论使用什么算法)的每次迭代中发生的变化,为此,我必须为用户“暂停”程序查看每个刻度的变化。
让我困惑的是“暂停”部分。 我看着time.sleep
这是无关的GUI程序(由于主循环)和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
类中还有一些其他函数,但它们无关紧要。
所以我的问题是:我将如何“暂停”或“停止”程序以便用户看到每个刻度的变化?
按照@Mike - SMT 的评论,我在bubbleSort
函数的末尾使用了root.update()
,如下所示:
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)
root.update()
这不仅“暂停”或“停止”或显示程序的进展,而且还调出程序的窗口并允许从主循环内更新图形。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.