2009-05-27 2 views
1

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

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

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

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

ответ

2

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

Вы попробовали the official wxPython tutorials? ... или вы были чем-то более конкретным?

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

[Изменить] Zetcode имеет a fairly lengthy tutorial on wxPython. Я не просмотрел все это сам, но это может помочь?

wxWidgets::wxApp::OnInit() документация достаточно ясен:

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

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

+0

Я так понимаю, но поскольку каждый объектно-ориентированный язык имеет конструкторы, зачем нужен OnInit()? – Javier

+0

Кстати, этот учебник очень короткий. – Javier

+0

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

0

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

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

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

+1

Документы предлагают это _is_ required ... –

0

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

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

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

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

+0

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

Смежные вопросы