Версия 1 от 2010-05-11 18:28:17

Убрать это сообщение

Добро пожаловать в wxPython

Вот - простая wxPython программа. Она создает окно с одним текстовым полем, которое отображает координаты курсора мыши. Это 20 строк кода, считая пустые строки.

Листинг 1.1 Работающая wxPython программа из 20 строк

   1 #!/bin/env python
   2 import wx
   3 class MyFrame(wx.Frame):
   4 
   5         def __init__(self):
   6             wx.Frame.__init__(self, None, -1, "My Frame", size=(300, 300))
   7             panel = wx.Panel(self, -1)
   8             panel.Bind(wx.EVT_MOTION, self.OnMove)
   9             wx.StaticText(panel, -1, "Pos:", pos=(10, 12))
  10             self.posCtrl = wx.TextCtrl(panel, -1, "", pos=(40, 10))
  11 
  12         def OnMove(self, event):
  13             pos = event.GetPosition()
  14             self.posCtrl.SetValue("%s, %s" % (pos.x, pos.y))
  15 
  16 if __name__ == '__main__':
  17         app = wx.PySimpleApp()
  18         frame = MyFrame()
  19         frame.Show(True)
  20         app.MainLoop()

Что можно сказать о программе из листинга 1.1? Она достаточно короткая и делает не слишком много, тем не менее, она создает окно, заполняет его данными, реагирует на события мыши — это не плохо для программы из 20 строк. Этот пример легко мог быть в три или четыре раза длиннее в некоторых, более кофейных, языках программирования. На рисунке 1.1 изображена программа во время выполнения.

http://python.su/static/books/wxpython-in-action/1/image002.gif

Рисунок 1.1 Наша первая wxPython программа, показывающая координаты мыши

Код читается достаточно легко. Даже если вы не знаете детали языка Python или wxPython, но имеете опыт программирования интерфейсов, вы, вероятно догадаетесь, что означают слова Frame, init , EVT_MOTION, TextCtrl, и MainLoop. Если вы не программируете на Python, могут возникнуть вопросы (например, где открывающие и закрывающие скобки для блоков кода?), и вероятно вы не знаете, что означают некоторые параметры (что это за константы -1?), тем не менее можно понять большую часть кода без подробных объяснений.

В этой книге, мы покажем, почему использование wxPython - это один из самых легких и мощных способов строить реальные программы с GUI. Одни наборы инструментов позволяют легко строить интерфейс непосредственно (в стиле Visual Basic), но не имеют языка программирования с ясностью, гибкостью, и мощью Python. Другие наборы инструментов имеют функциональные возможности wxPython, но вынуждает вас использовать язык неподходящий для быстрой разработки. В wxPython вы найдете правильное сочетание простоты и гибкости максимально эффективное для быстрой разработки программ. К тому же, wxPython – это проект с открытым исходным кодом.

К тому времени, когда вы достигните конца этой книги, вы будете знать, как строить современный GUI с использованием wxPython. Вы будете в состоянии работать с базовыми элементами интерфейса, такими как кнопки и меню, и более продвинутыми элементами интерфейса, типа деревьев и редакторов HTML. В этой главе, мы начнем работать с wxPython, и обсудим, почему инструментарий wxPython будет удачным выбором для ваших программных проектов.

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

Быстрый старт с wxPython

Мы начнем с разработки реальной, хотя и простой, wxPython программы. Пока мы не будем создавать ничто сложного. Мы собираемся шаг за шагом провести вас через весь процесс создания вашей самой первой wxPython программы. Вначале удостоверьтесь, что установили все необходимое. В таблице 1.1 перечислено все, что нужно для выполнения wxPython.

Таблица 1.1 Что должно быть установлено на вашем компьютере для работы wxPython

Инструмент

Описание

Правильная операционная система

Это – просто. У вас бгатый выбор: Любая 32-битная операционная система Microsoft Windows начиная c Windows 98 и выше. Любая Unix или Linux система, с установленным Gnome Toolkit (GTK). Macintosh, с операционной системой Mac OS X 10.2.3 или выше.

Язык программирования Python

Доступен для загрузки с www.python.org.Любая версия 2.3 или выше будет работать. Большинство дистрибутивов Linux включают версию Python, как и Mac OS X 10.2.3 или выше. Тем не менее, желательно загрузить последнюю версию.

Инструментарий wxPython

Доступен для загрузки с www.wxpython.org. Есть различные версии, в зависимости от вашей операционной системы и версии Python. Убедитесь, что вы загрузили инсталлятор, который соответствует вашей платформе, версии Python, и предпочтению Unicode. Также загрузите демонстрационный пакет и документацию. Если Вы уже устанавливали какое-либо программное обеспечение на вашу систему, то установка wxPython выполняется аналогично. Последние версии Mac OS X и Linux уже включают wxPython, но лучше загрузить последнюю версию с сайта.

Редактор текста

Мы рекомендуем редактор, который понимает синтаксис Python и может выделять цветом ключевые слова, чтобы сделать код более читаемым. Большинство популярных редакторов включают поддержку Python, так что используйте редактор, который Вы предпочитаете. Если у Вас нет особых предпочтений, то попробуйте IDLE. Это интегрированная среда разработки, которая идет вместе с Python. Она включает редактор исходного текста, интерактивную оболочку, отладчик, и другие инструменты. На сайте Python представлен целый список специализированных Python-редакторов www.python.org/editors.

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

Рисунки 1.2, 1.3, и 1.4 показывают, на что будет похожа ваша программа в зависимости от используемой платформы. http://python.su/static/books/wxpython-in-action/1/image004.gif

Рисунок 1.2, hello.py на Windows

http://python.su/static/books/wxpython-in-action/1/image006.gif

Рисунок 1.3, hello.py на Linux

http://python.su/static/books/wxpython-in-action/1/image008.gif

Рисунок 1.4, hello.py на Mac OS X

Создание пустой минимальной программы wxPython

Давайте начнем с самой простой исполняемой программы на wxPython. Создайте файл, названный “bare.py” и наберите следующий код. Помните, в Python, отступ в начале строки имеет значение.

   1 import wx
   2 class App(wx.App):
   3 
   4         def OnInit(self):
   5             frame = wx.Frame(parent=None, title='Bare')
   6             frame.Show()
   7             return True
   8 
   9 app = App()
  10 app.MainLoop()

Данная программа просто отображает пустое окно. Это не много, но потерпите, скоро мы ее усовершенствуем, и программа будет делать что-нибудь более полезное.

Главная цель этой программы состоит в том, чтобы удостовериться, что вы можете создать исходный файл Python и проверить, что wxPython установлен должным образом. Так что: создайте файл, наберите код, сохраните файл с названием "bare.py", запустите его на выполнение, и убедитесь, что у вас все работает.

Механизм запуска программы зависит от вашей операционной системы. Вы можете выполнить эту программу, набрав ее как параметр командной строки интерпретатора Python, используя одну из следующих команд:

python bare.py
pythonw bare.py

На рисунках 1.5, 1.6, и 1.7 показано, как выглядит программа во время выполнения на различных операционных системах.

http://python.su/static/books/wxpython-in-action/1/image010.gif

Рисунок 1.5, bare.py на Windows.

http://python.su/static/books/wxpython-in-action/1/image012.gif

Рисунок 1.6, bare.py на Linux.

http://python.su/static/books/wxpython-in-action/1/image014.gif

Рисунок 1.7, bare.py на Mac OS X.

Окно (window), фрейм (frame), виджет (widget)

Большинство людей глядя на эту программу во время выполнения, сказали бы, что они видят «окно» (“window”). Однако, в wxPython это называется «фрейм» (“frame”). В wxPython, “window” – это базовый класс для любого объекта, который отображается на экране (в некоторых инструментариях это называется виджет (“widget”)). Так, программист wxPython будет часто обращаться к объектам, типа кнопок или текстовых полей как “ windows.” Это кажется немного запутанным. В этой книге, чтобы избежать путаницы, мы будем использовать термин виджет (widget) для базового класса элементов интерфейса. К тому же windows - это название главного продукта большой корпорации. Когда мы будем обращаться к операционной системе подобного названия, мы сделаем это с прописной буквой “W”.

Пока эта программа только создает и отображает пустой фрейм, весь код является основным; удалите любую стоку кода, и программа не будет работать. Эта минимальная wxPython программа иллюстрирует пять основных шагов, которые нужно сделать при разработке любой wxPython программы:

Исследуем эту минимальную программу, и посмотрим, что происходит на каждом шаге.

Импорт пакетов wxPython

Первое, что нужно сделать - импортировать главный пакет wxPython, который называется wx:

   1 import wx

Как только этот пакет импортирован, вы можете обращаться к классам, функциям, и константам wxPython, используя название пакета wx как приставку, например:

   1 class App(wx.App):
   2 
   3 {{{#!wiki note
   4 '''Импорт в старом стиле'''
   5 
   6 Во время написания этой книги название пакета wxPython изменилось. Так как старое соглашение обозначения все еще поддерживается, вы вероятно столкнетесь с кодом wxPython, написанным в старом стиле. Мы сделаем краткое отступление, чтобы объяснить старый стиль и почему он был изменен. Старое название пакета было wxPython, и он содержал внутренний модуль wx. Было два общих способа импортировать необходимый код — вы могли импортировать wx модуль из пакета wxPython:
   7 {{{#!highlight python
   8 from wxPython import wx   # УСТАРЕВШИЙ СТИЛЬ!!! НЕ ИСПОЛЬЗОВАТЬ!!!

Или, вы могли импортировать все из wx модуля непосредственно.

   1 from wxPython.wx import *   # УСТАРЕВШИЙ СТИЛЬ!!! НЕ ИСПОЛЬЗОВАТЬ!!!

Оба метода импорта имели серьезные недостатки. Использовать второй метод import * вообще не рекомендуется в Python из-за возможности конфликтов пространств имен. Старый wx модуль избегал этой проблемы, добавляя приставку wx почти ко всем именам. Но это не было надежной гарантией, import * все еще мог вызвать проблемы. Многие программисты wxPython предпочли именно этот стиль, и вы увидите, что он использовался в старом коде довольно часто. Неприятной особенностью этого стиля было то, что названия класса начинались с буквы в нижнем регистре, в то время как большинство wxPython методов начинается с буквы в верхнем регистре, что является полной противоположностью соглашениям принятым для программирования на Python. Однако, если бы вы захотели избежать конфликтов имен, вызваннх import *, используя from wxPython import wx, то теперь вы должны были бы напечатать “wx” дважды для каждого класса, функции, или константы один раз как приставка пакета и один раз как "нормальная" приставка, например, wx.wxWindow. Это не прижилось. Многие wxPython программисты видели эту дилемму как бородавку, которая должна быть удалена, и в конечном счете, это было сделано. }}}