Уведомления

Группа в Telegram: @pythonsu

#1 Март 21, 2008 15:07:05

Saff
От:
Зарегистрирован: 2008-03-18
Сообщения: 56
Репутация: +  0  -
Профиль   Отправить e-mail  

Обновление формы(wx).

Возможно ли избежать “зависания” окна при выполнении ресурсоёмких, или просто долгих операций.
Ну, например, по onclick происходит долгий процесс заполнения ну например листа, то есть операция секунд на 10-20.
При этом если подвигать окно, то элементы перестают обновляться, и программа перестаёт отвечать. Если же не двигать окно, то всё нормально, и все элементы могут изменяться динамично.Возможно ли каким нибудь способом отрисовывать форму, что бы не было зависаний.
Например если в List'e(со скролом) каждые несколько секунд обновляются записи можно было проскролить вниз и ничего не зависло?
Вроде объяснил )))



Офлайн

#2 Март 21, 2008 16:24:28

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Обновление формы(wx).

Сделать заполнение отдельным средом, или рефрешить все во время заполенния.

Офлайн

#3 Март 21, 2008 16:34:09

Saff
От:
Зарегистрирован: 2008-03-18
Сообщения: 56
Репутация: +  0  -
Профиль   Отправить e-mail  

Обновление формы(wx).

Всмысле отдельным средом??
И как отрефрешить всё?Доставать каждый объект?Если да, то как достать только нужные? )



Офлайн

#4 Март 21, 2008 16:44:14

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Обновление формы(wx).

Нет, просто попробуйте добавлять в лист отдельным потоком, а в конце обновить форму.
Но я думаю что можно просто обновлять форму во время заполнения листа, но, может моргать все.
вообще интересно, я попробую на досуге, точнее напишу.

Офлайн

#5 Март 21, 2008 17:02:40

Saff
От:
Зарегистрирован: 2008-03-18
Сообщения: 56
Репутация: +  0  -
Профиль   Отправить e-mail  

Обновление формы(wx).

Вопрос: ))) Как обновить форму, я немного запутался в объектах ))



Офлайн

#6 Март 21, 2008 17:44:54

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Обновление формы(wx).

Пример - додаем 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()
Обновляем только ListBox. Все остальное будет обновляется само, в своём потоке.
Проблема есть только в обрывании процесса (при выходе из программы, например).
Про потоки в питоне вот тут хорошо написано.

PS: Код немного странный - я просто модифицировал код демки ListBox из пакета wxPython Docs Demos and Tools

Отредактировано (Март 21, 2008 17:59:39)

Офлайн

#7 Март 23, 2008 19:06:40

Saff
От:
Зарегистрирован: 2008-03-18
Сообщения: 56
Репутация: +  0  -
Профиль   Отправить e-mail  

Обновление формы(wx).

Огромное спасибо за ответ, сегодня попробую!!



Офлайн

#8 Март 24, 2008 09:53:47

Saff
От:
Зарегистрирован: 2008-03-18
Сообщения: 56
Репутация: +  0  -
Профиль   Отправить e-mail  

Обновление формы(wx).

Попробывал, всё получилось!Сначала были проблемы с потерей фокуса(а вследствии невозможность управлять формой), но я насильно поставил перевод фокуса на листбокс и всё нормально стало.Спасибо!



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version