簡體   English   中英

暫停 GUI Python 程序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM