WxPython различия между Windows и Linux

1

Учебники, которые я нашел на WxPython, используют примеры из Linux, но в некоторых деталях, похоже, есть различия.

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

Итак, знаете ли вы, какие существуют важные различия, или, может быть, хороший учебник, ориентированный на Windows?

EDIT: Я просто помнил это: знает ли кто-нибудь, почему, когда требуется подклассификация wx.App, метод OnInit(), а не более логичный __init__()?

Теги:
user-interface
wxpython

3 ответа

2
Лучший ответ

Я заметил необычные особенности в небольшом графическом интерфейсе, который я написал некоторое время назад, но прошло много времени с тех пор, как я попытался определить специфику, это довольно отдаленная память. У вас есть некоторые конкретные примеры, которые терпят неудачу? Может быть, мы сможем улучшить их и исправить ошибки?

Вы пробовали официальные учебники wxPython?... или вы были чем-то более конкретным?

r.e. ваше редактирование. Вы должны использовать OnInit(), потому что вы подклассифицируете wx. App (т.е. Это требование для wxWidgets, а не Python), и реализация wxPython везде, где это возможно, просто оболочка для wxWidgets.

[Изменить] Zetcode имеет довольно длинный учебник по wxPython. Я не просмотрел все это сам, но это может помочь?

Документация wxWidgets::wxApp::OnInit() довольно понятна:

Это должно быть предусмотрено приложением, и обычно создается главное окно приложения, при необходимости вызывающее wxApp:: SetTopWindow. Вы можете использовать OnExit для очистки чего-либо инициализированного здесь, при условии, что функция возвращает true.

Если wxWidgets не предоставил общий интерфейс, вам придется делать разные вещи на С++ (используя конструктор) по сравнению с Python __init__(self,...). Использование независимой от языка инициализации позволяет портам wxWidgets на других языках выглядеть более похожими, что должно быть хорошо, что правильно?: -)

  • 0
    Я понимаю это, но так как каждый объектно-ориентированный язык имеет конструкторы, зачем требовать OnInit ()?
  • 0
    Кстати, этот учебник очень короткий.
Показать ещё 2 комментария
0

Я нахожу ряд небольших различий, но не помню их всех. Вот два:

1) Макет может немного отличаться, например, заставляя вещи не полностью вписываться в окно в одной ОС, когда это делается в другом. Я не исследовал причины этого, но чаще всего это случается, когда я использую позиции, а не sizers, чтобы упорядочить вещи.

2) Я должен явно называть Refresh больше в Windows. Например, если вы поместите одну панель поверх другой, вы не увидите ее на верхней панели в Windows, пока не назовете Refresh.

Я вообще, я пишу приложения в Linux и запускаю их в Windows, и все работает одинаково, поэтому это разумный подход, но для меня это редко встречается, когда что-то работает прямо из ворот после переключения ОС.

  • 0
    В документации явно сказано, что фрейм будет содержать только один виджет, поэтому для добавления вам нужно добавить панель. Что касается макета, то, похоже, что большинство «последних» оконных API рекомендуют использовать размеры для квазиавтоматического макета форм. Как только вы привыкнете к идее, это на самом деле очень удобно. Означает меньше работы для поддержки широкого диапазона размеров экрана, которые, вероятно, будут у пользователей. Независимо от того, какой размер вы оптимизируете, большинство пользователей будут использовать разные размеры шрифтов и по-разному менять размеры окон, поэтому ваша тщательная работа в конечном итоге будет напрасной.
0

EDIT: Я просто помнил это: знает ли кто-нибудь, почему при подклассификации wx.App требуется метод OnInit(), а не более логичный __init__()?

Я использую OnInit() для симметрии: также метод OnExit().

Изменить: Возможно, я ошибаюсь, но я не думаю, что требуется использовать OnInit().

  • 1
    Документы предполагают, что это требуется ...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню