Учебники, которые я нашел на WxPython, используют примеры из Linux, но в некоторых деталях, похоже, есть различия.
Например, в Windows панель за виджетами обязательна для правильного отображения фона. Кроме того, некоторые примеры, которые отлично смотрятся в учебниках, не работают на моем компьютере.
Итак, знаете ли вы, какие существуют важные различия, или, может быть, хороший учебник, ориентированный на Windows?
EDIT: Я просто помнил это: знает ли кто-нибудь, почему, когда требуется подклассификация wx.App, метод OnInit(), а не более логичный __init__
()?
Я заметил необычные особенности в небольшом графическом интерфейсе, который я написал некоторое время назад, но прошло много времени с тех пор, как я попытался определить специфику, это довольно отдаленная память. У вас есть некоторые конкретные примеры, которые терпят неудачу? Может быть, мы сможем улучшить их и исправить ошибки?
Вы пробовали официальные учебники wxPython?... или вы были чем-то более конкретным?
r.e. ваше редактирование. Вы должны использовать OnInit()
, потому что вы подклассифицируете wx. App (т.е. Это требование для wxWidgets, а не Python), и реализация wxPython везде, где это возможно, просто оболочка для wxWidgets.
[Изменить] Zetcode имеет довольно длинный учебник по wxPython. Я не просмотрел все это сам, но это может помочь?
Документация wxWidgets::wxApp::OnInit()
довольно понятна:
Это должно быть предусмотрено приложением, и обычно создается главное окно приложения, при необходимости вызывающее wxApp:: SetTopWindow. Вы можете использовать OnExit для очистки чего-либо инициализированного здесь, при условии, что функция возвращает true.
Если wxWidgets не предоставил общий интерфейс, вам придется делать разные вещи на С++ (используя конструктор) по сравнению с Python __init__(self,...)
. Использование независимой от языка инициализации позволяет портам wxWidgets на других языках выглядеть более похожими, что должно быть хорошо, что правильно?: -)
Я нахожу ряд небольших различий, но не помню их всех. Вот два:
1) Макет может немного отличаться, например, заставляя вещи не полностью вписываться в окно в одной ОС, когда это делается в другом. Я не исследовал причины этого, но чаще всего это случается, когда я использую позиции, а не sizers, чтобы упорядочить вещи.
2) Я должен явно называть Refresh
больше в Windows. Например, если вы поместите одну панель поверх другой, вы не увидите ее на верхней панели в Windows, пока не назовете Refresh.
Я вообще, я пишу приложения в Linux и запускаю их в Windows, и все работает одинаково, поэтому это разумный подход, но для меня это редко встречается, когда что-то работает прямо из ворот после переключения ОС.
EDIT: Я просто помнил это: знает ли кто-нибудь, почему при подклассификации wx.App требуется метод OnInit(), а не более логичный
__init__()
?
Я использую OnInit()
для симметрии: также метод OnExit()
.
Изменить: Возможно, я ошибаюсь, но я не думаю, что требуется использовать OnInit()
.