python - 我的排序可视化工具中的 Tkinter 闪烁画布/矩形

时间:2021-02-05 04:58:05

标签: python debugging tkinter tkinter-canvas flicker

我正在尝试制作一个排序可视化工具,一切都很顺利,但我遇到了一个问题。 首先,我知道有很多类似的帖子,但没有一个可以帮助我。 我有这个问题,当排序数据的大小很高(> 40)时,当我运行排序算法时,屏幕开始闪烁

Here's a video I recorded with the problem i have

我对可能是什么问题有一些想法,但是由于我对使用 python 的 tkinter 有点陌生,所以我很难找出到底是什么问题。这是我在绘图/绘图数据函数上的 python 代码

def runSort():
    global data
    data=Algorithm.bubblesort(data, graphData)
    print("Sorting...")

def graphData(data, colorData):
    canvas.delete("all")
    can_height = 530
    can_width  = 1177
    x_width    = can_width/(len(data)+1)
    offset=5
    spacing=10
    normalized_data=[i /max(data) for i in data]
    for i, height in enumerate(normalized_data):
        x0=i*x_width+offset+spacing
        y0=can_height- height * 480

        x1=(i+1)*x_width+offset
        y1=can_height

        canvas.create_rectangle(x0,y0,x1,y1,fill=colorData[i])
        if(len(data)<=50):
            canvas.create_text(x0+2,y0, anchor=SW,text=str(data[i]))
        root.update_idletasks()

这是我的排序算法代码

import time

class Algorithm():
    def bubblesort(array, drawData):
        for i in range(len(array)):
            for j in range(len(array)-1-i):
                if array[j] > array[j+1]:
                    array[j], array[j+1] = array[j+1], array[j]
                    drawData(array, ["cyan2" if x==j or x==j+1 else "coral3" for x in range(len(array))])
                    if len(array)<50:
                        time.sleep(0.5)
                    else:
                        time.sleep(0.1)


        drawData(array, ["OliveDrab2" for x in range(len(array))])
        return array

我希望有人能帮助我,因为我不知道如何解决这个问题,或者是否可能。如果您需要更多我的代码,请随意询问,我很乐意为您提供我的代码。谢谢!以及来自墨西哥的问候。

0 个答案:

没有答案
相关问题