2014-11-25 2 views
-3
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

Где ваш профайлер? –

+2

Вы пробовали профилировать его, чтобы увидеть, какие части занимают больше всего времени? – nanny

+2

Что-то пошло не так с вашим редактированием. Большая часть кода ушла, а половина названия ушла. –

ответ

4

CellSwitcher Ваших функций итерации по всем пунктам в клетке, когда он в конечном итоге только изменяет девять клеток (сами и ее 8 соседей), не так ли? Зачем перебирать каждую ячейку? Если вам известна ячейка, которая была нажата (например, строка 3, столбец 2), вы можете легко вычислить соседние ячейки. Итак, часть ответа состоит в том, чтобы удалить итерацию по всем ячейкам и заменить ее прямым поиском ячейки с щелчком и ее соседями.

Кроме того, ваша функция возврата вызывает CellSwitcher, который кажется излишним. Если вы произвольно устанавливаете цвет каждой ячейки, зачем проходить через CellSwitcher, так как он меняет цвета всех его соседей?

Возможно, самым большим виновником является то, что вы воссоздаете все объекты холста при каждом вызове до CellSwitcher, не удаляя ни один из старых объектов. Для этого нет оснований - создайте все объекты canvas только один раз, а затем измените их с помощью метода холста на itemconfig.

У холста есть проблемы с производительностью, когда у вас много предметов. В вашем случае, после первого GUI вы уже создали 9800 элементов холста. Нажмите на одну ячейку, и на холсте теперь есть 10 200 предметов. И так далее. Холст может довольно легко обрабатывать тысячи предметов, даже десятки тысяч. Однако, когда я перемещаю ползунок до 20, вы создаете целые 125 600 объектов на холсте, что, безусловно, приведет к тому, что canvas будет недостаточно.

Смежные вопросы