Форум сайта python.su
Возможно ли избежать “зависания” окна при выполнении ресурсоёмких, или просто долгих операций.
Ну, например, по onclick происходит долгий процесс заполнения ну например листа, то есть операция секунд на 10-20.
При этом если подвигать окно, то элементы перестают обновляться, и программа перестаёт отвечать. Если же не двигать окно, то всё нормально, и все элементы могут изменяться динамично.Возможно ли каким нибудь способом отрисовывать форму, что бы не было зависаний.
Например если в List'e(со скролом) каждые несколько секунд обновляются записи можно было проскролить вниз и ничего не зависло?
Вроде объяснил )))
Офлайн
Сделать заполнение отдельным средом, или рефрешить все во время заполенния.
Офлайн
Всмысле отдельным средом??
И как отрефрешить всё?Доставать каждый объект?Если да, то как достать только нужные? )
Офлайн
Нет, просто попробуйте добавлять в лист отдельным потоком, а в конце обновить форму.
Но я думаю что можно просто обновлять форму во время заполнения листа, но, может моргать все.
вообще интересно, я попробую на досуге, точнее напишу.
Офлайн
Вопрос: ))) Как обновить форму, я немного запутался в объектах ))
Офлайн
Пример - додаем 10000 строчек в ListBox в отдельном потоке.
class AddListThread(threading.Thread): def __init__(self, lb1): self.lb1 = lb1 threading.Thread.__init__(self) def run(self): for i in range(100000): self.lb1.Insert(str(i), i, clientData=None) self.lb1.Update() class TestListBox(wx.Panel): def __init__(self, parent, log): self.log = log wx.Panel.__init__(self, parent, -1) wx.StaticText(self, -1, "This example add itemsto the wx.ListBox control in thread.", (20, 10)) self.lb1 = wx.ListBox(self, 60, (100, 50), (90, 120), ['',], wx.LB_SINGLE) self.b = wx.Button(self, 10, "Add 100000 items to ListBox", (300, 20)) self.Bind(wx.EVT_BUTTON, self.OnClick, self.b) def OnClick(self, event): AddListThread(self.lb1).start()
Отредактировано (Март 21, 2008 17:59:39)
Офлайн
Огромное спасибо за ответ, сегодня попробую!!
Офлайн
Попробывал, всё получилось!Сначала были проблемы с потерей фокуса(а вследствии невозможность управлять формой), но я насильно поставил перевод фокуса на листбокс и всё нормально стало.Спасибо!
Офлайн