Добрый день. Не могли бы вы меня направить в нужную сторону?)
Собственно понадобилось мне создать дерево(wx.tree) из моего файла(от 60000 записей). Собственно на импорт и первоначальную обработку записей уходит достаточно маленькое время. А вот на создание самого дерева очень много.
Для создания дерева был взят код из темы “Помогите с заполнением wx.TreeCtrl из SQL” (http://python.su/forum/viewtopic.php?id=5459)
#######################################################
import wx
class TestFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, -1, “Test”, size=(300, 300))
self.tree = wx.TreeCtrl(self)
_Tree = [,,,
,,]
def branch(node, id):
for x in filter(lambda x: x == id, _Tree):
if node:
new_node = self.tree.AppendItem(node, x)
else:
new_node = self.tree.AddRoot(x)
self.tree.SetPyData(new_node, x)
branch(new_node, x)
self.tree.Freeze()
branch(None, 0)
self.tree.Thaw()
if __name__ == ‘__main__’:
app = wx.PySimpleApp()
frame = TestFrame()
frame.Show(True)
app.MainLoop()
#######################################################
После некоторого раздумья, так как программа для формирования дерева из 18000 записей дерево делала за 83 секунды, а из 60000 записей ну вообще много времени))) было принято решение доработать для того чтобы она не проходила одно место 2 раза. Собственно я отсортировал список и переписал немного
#######################################################
class TestFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, -1, “Test”, size=(300, 300))
self.tree = wx.TreeCtrl(self)
_Tree = p
def branch(node, id):
a, i = , 0
while i < len(_Tree):
if _Tree == id:
a.append(_Tree)
del _Tree
i-=1
elif a: break
i+=1
for x in a:
if node:
new_node = self.tree.AppendItem(node, x)
else:
new_node = self.tree.AddRoot(x)
#print x
self.tree.SetPyData(new_node, x)
branch(new_node, x)
self.tree.Freeze()
branch(None, 0)
self.tree.Thaw()
if __name__ == ‘__main__’:
app = wx.PySimpleApp()
frame = TestFrame()
frame.Show(True)
app.MainLoop()
#######################################################
теперь она выполнялась за 48 секунд для 18000, но это тоже многовато будет… Подскажите какой нибудь другой подход или как её ещё убыстрить?