wxpython и заставка

Я пытаюсь настроить заставку для моего исполняемого файла графического интерфейса с помощью wxpython. По сути, я сначала загружаю кучу баз данных. Затем я настроил свое окно графического интерфейса wx. Эти два процесса занимают около 35 секунд.

Когда я запускаю код, я хочу, чтобы заставка появлялась и оставалась до тех пор, пока не заработает графический интерфейс (после 35 секунд).

Я просмотрел это: Как адаптировать мой текущий экран-заставку, чтобы другие части моего кода могли работать в фоновом режиме?

Это не совсем помогает, потому что я загружаю свои базы данных вне моего кода wx.

Например:

Imports
Database loading
class (my wx)

Я загружаю базу данных вне wx, потому что у меня есть несколько классов, ссылающихся на базы данных. Я довольно новичок в python, поэтому, пожалуйста, полегче со мной :)

Любая помощь с настройкой заставки для запуска перед загрузкой моей базы данных и остановки при загрузке моего графического интерфейса в wx? Спасибо!


person mcfly    schedule 29.08.2012    source источник
comment
Вы можете поместить загрузку базы данных в поток и использовать переменную (например, счетчик), которая будет увеличиваться по мере загрузки баз данных, и ваш экран-заставка будет читать эту переменную, отображая индикатор, пока все не будет сделано.   -  person Rostyslav Dzinko    schedule 29.08.2012
comment
^ Вы не должны этого делать, лучше используйте wx.CallAfter для обновления графического интерфейса, это проще и менее подвержено ошибкам.   -  person dav1d    schedule 29.08.2012
comment
Я читал о wx.CallAfter, но не уверен, как его реализовать. У вас есть предложение?   -  person mcfly    schedule 29.08.2012


Ответы (1)


Я думаю, что вы идете об этом немного назад. Поместите загрузку баз данных в инициализацию фрейма или wx.App. Но перед загрузкой покажите заставку. Затем выполните загрузку. Затем, когда загрузка будет завершена, выполните загрузку графического интерфейса и прямо перед тем, как вы дойдете до метода Frame Show(), закройте экран-заставку.

person Mike Driscoll    schedule 29.08.2012
comment
это звучит хорошо, но можно ли будет использовать базы данных (переменные и списки) во всех других классах? Например, у меня есть около 4 разных классов, которые обращаются к одним и тем же переменным/спискам. Вот почему у меня базы данных загружаются в начале моего файла .py, а не внутри определенного класса. - person mcfly; 29.08.2012
comment
Я не знаю, как устроен ваш код. Обычно я помещаю свой код базы данных в файл model.py и загружаю его в начале, а затем получаю к нему доступ с помощью своего контроллера, который импортируется во все остальные классы. Мой проект medialocker может дать вам некоторые подсказки по этому поводу: bitbucket.org/driscollis/medialocker . Я также писал о более ранней версии здесь: blog.pythonlibrary.org/2011/11/10/ - person Mike Driscoll; 29.08.2012
comment
В своем коде я предпочитаю использовать pubsub для работы с вводом-выводом БД, поскольку модульность была требованием дизайна. Я запускаю свою БД с помощью своего фрейма, но все остальные вызовы БД выполняются через сообщения pubsub. Таким образом, моим классам даже не нужно знать, что моя БД существует, только как запрашивать и получать данные. Просто помните, что сообщения pubsub асинхронны! - person acattle; 30.08.2012