我有什么办法吗?

时间:2014-11-25 21:52:59

标签: python performance tkinter

from tkinter import *
from tkinter import ttk

    Lastx, lasty = 0,0
    GridSize="410x520"

    def reset():#Resets the grid size to the size set in the slider and randomizes cells.
        global grid                                   
        global GridSize
        gridMaker()
        canvas.delete("all")#Clears the screen

1 个答案:

答案 0 :(得分:4)

你的CellSwitcher函数遍历单元格中的所有项目,当它最终只修改九个单元格(本身及其8个邻居)时,对吗?为什么迭代每个单元格?如果您知道单击的单元格(例如:第3行,第2列),您可以轻松计算相邻单元格。因此,部分答案是删除所有单元格上的迭代,并用直接查找单击的单元格及其邻居来替换它。

此外,您的重置功能调用CellSwitcher,这似乎有点过分。如果你是随机设置每个单元格的颜色,为什么要通过CellSwitcher,因为它改变了所有邻居的颜色?

也许最大的罪魁祸首是你在每次调用CellSwitcher时重新创建所有画布对象,而不删除任何旧对象。没有理由这样做 - 只创建一次所有画布对象,然后使用画布的itemconfig方法更改它们。

当您拥有大量商品时,画布会出现性能问题。在您的情况下,GUI首次出现后,您已经创建了9800个画布项。单击单个单元格,画布现在有10,200个项目。等等。画布可以很容易地处理成千上万的物品,甚至成千上万。但是,当我将滑块移动到20时,最终会在画布上创建高达125,600个对象,这肯定会导致画布表现不佳。