Разработка приложений с использованием Python и wxFormBuilder

{title}

Язык программирования Python позволяет использовать различные библиотеки и фреймворки для разработки графических интерфейсов. Некоторые из них - Tinker, Wxwidget и QT, платформа, на которой мы видели учебные пособия:

  • Мультиплатформенные приложения с Python, PyQT и QT Desginer 5
  • Приложения с базой данных Sqlite, PyQT и QT Desginer.

{title}

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

wxFormBuilder - это инструмент визуальной разработки, большое преимущество которого заключается в том, что он может генерировать код на C ++, Python, PHP, Lua и XRC во время его разработки. Работает на Windows, Linux и Mac Os.

В этом руководстве мы сделаем установку в Linux и на виртуальной машине с VirtualBox и Windows 7, чтобы доказать, что мы можем разработать мультиплатформенное приложение, точно так же, как мы могли бы установить в Linux и иметь виртуальную машину с Linux.

Нам нужно будет установить следующие инструменты:

питон

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

Одним из преимуществ Python является то, что он поддерживает несколько парадигм программирования, таких как объектная ориентация, императивное и функциональное программирование или процедуры. Мы можем скачать Python с официального сайта.

WxPython

Это мультиплатформенный, он может работать на Windows, Linux и Mac OS без изменений. Результатом проектирования интерфейса является собственный аспект приложения в соответствии с операционной системой.

Это набор библиотек, которые позволяют переносить и использовать графическую библиотеку wxWidgets с использованием языка программирования Python. Библиотека wxWidgets отличается кроссплатформенностью.

Его можно скачать с официального сайта WxPython, в Linux он поставляется в репозиториях или может быть добавлен

{title}

wxFormBuilder

Это бесплатная, кроссплатформенная и с открытым исходным кодом IDE. Он используется для разработки графических интерфейсов графического интерфейса пользователя wxWidgets или, в этом случае, wxPython, позволяет создавать кроссплатформенные приложения. Как и Qt Designer, инструмент wxFormBuilder используется для визуальной разработки.

wxFormbuilder позволяет генерировать код на C ++, Python, PHP, Lua и XRC. Код создается при разработке.

Мы можем загрузить его с его официального сайта, мы должны установить версию выше 3.4, которая поддерживает все языки, упомянутые выше.

Примеры применения с wxPython и wxFormBuilder
В этом руководстве мы разработаем приложение для Linux, а затем запустим его для Windows. В Linux Python уже установлен, поэтому мы установим wxPython и wxFormbuilder, из окна терминала мы напишем следующую команду:

 sudo add-apt-repository -y ppa: wxformbuilder / wxwidgets sudo apt-get update sudo apt-get install libwxgtk3.0-0 libwxgtk-media3.0-0 sudo add-apt-repository -y ppa: wxformbuilder / release sudo apt -получить обновление sudo apt-get установить wxformbuilder 
Затем мы должны добавить wxpython как переменную окружения, чтобы иметь возможность использовать его из любого каталога:
 export PYTHONPATH = "$ PYTHONPATH": / usr / lib / python2.7 / dist-packages / wx-2.8-gtk2-unicode / 
Далее мы открываем wxFormbuilder из главного меню:

wxFormBuilder представляет стол с левым столбцом, в котором будут расположены используемый нами проект или экран и компоненты, в центре вкладка дизайна и вкладка для каждого языка, справа у нас будут свойства как проекта, так и компонентов, которые мы используем,

{title}

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

{title}

Далее мы идем на вкладку Форма и добавляем форму, которая будет контейнером экрана.

$config[ads_text5] not found

{title}

Затем из свойств мы можем изменить имя формы, которой мы назначаем MiForm, и заголовок, который будет Example01- Tutorial, мы также можем изменить многие параметры, такие как цвет фона, размер, тип окна и многое другое.

Мы можем перейти на вкладку Python и посмотреть, как генерируется код.

{title}

Чтобы сгенерировать код в файле, мы должны сначала сохранить проект из меню « Файл»> «Сохранить как» и сохранить его как example01.fbp.

{title}

$config[ads_text5] not found

Далее мы идем в пункт меню File> Generate Code, затем мы идем в каталог, где мы сохраняем файл проекта, и мы видим файл noname.py

{title}

Этот файл noname.py содержит код Python, сгенерированный с дизайном интерфейса, мы можем переименовать файл в example01.py

Затем мы должны добавить код, чтобы этот дизайн показывался при выполнении приложения. Для этого мы открываем файл и добавляем следующий код ниже, оставаясь следующим образом:

 import wx import wx.xrc класс MiForm (wx.Frame): def __init __ (self, parent): wx.Frame .__ init__ (self, parent, id = wx.ID_ANY, title = u "Example01 - Учебное пособие", pos = wx .DefaultPosition, size = wx.Size (500, 300), style = wx.DEFAULT_FRAME_STYLE | wx.TAB_TRAVERSAL) self.SetSizeHintsSz (wx.DefaultSize, wx.DefaultSize) self.Centre (wx.BOTH) def __del # (pass) (pass) Код завершения формы ## Код, который показывает приложение при запуске app = wx.App (False) frame = MiForm (None) frame.Show (True) app.MainLoop () 
Затем из окна терминала идем в каталог приложения и запускаем python example01.py

$config[ads_text6] not found

{title}

Затем мы переходим к wxFormbuilder и начинаем проектировать экран. Компоненты распределяются по экрану через Layout и сетки, в этом случае мы выберем вертикальный wxBoxSizer, который разделит экран на три строки, в которые мы добавим компоненты.

{title}

Далее мы добавим меню, для этого перейдем на вкладку Menu / Toolbar, сначала добавим компонент MenuBar, который будет основным меню. Затем мы добавим по иерархии элемент Open Menutitem, разделитель и другой элемент Menu с именем Exit.

{title}

$config[ads_text5] not found

Мы можем видеть, что объекты размещаются в соответствии с иерархией, где вышеупомянутый объект охватывает те, что ниже, мы можем поменять их с помощью перетаскивания. Затем мы перейдем на вкладку « Данные » и добавим элемент управления wxGrid для отображения сетки данных, для них мы будем размещены в макете, чтобы следующий элемент управления находился под меню.

{title}

Мы генерируем новый код и файл noname.py будет изменен, мы можем переименовать его в качестве примера 02.py, добавив внесенные изменения. Затем мы запускаем из окна терминала, используя команду:

 python example02.py 

{title}

$config[ads_text6] not found

Затем мы переходим к wxFormbuilder и добавляем разделительную полосу под сеткой, на вкладке Common и выбираем компонент wxStaticLine .

{title}

Далее мы создадим поля для создания основной детали, для этого мы поместим себя в макет и добавим компонент.

{title}

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

{title}

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

 import wx import wx.xrc import wx.grid ####################################### ################################### ## Class MyFrame1 ########### ################################################## ############## class MyForm (wx.Frame): def __init __ (self, parent): wx.Frame .__ init__ (self, parent, id = wx.ID_ANY, title = wx. EmptyString, pos = wx.DefaultPosition, size = wx.Size (417, 350), style = wx.DEFAULT_FRAME_STYLE | wx.TAB_TRAVERSAL) self.SetSizeHintsSz (wx.DefaultSize, wx.DefaultSize) bSizer1 = wx.BoxSTIC) w .m_grid1 = wx.grid.Grid (self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, 0) # Сетка self.m_grid1.CreateGrid (4, 4) self.m_grid1.EnableEditing (True) self.m_grid1.EnableGridLines (True) self.m_grid1.EnableDragGridSize (False) self.m_grid1.SetMargins (0, 0) # Столбцы self.m_grid1.EnableDragColMove (False) self.m_grid1.EnableDragColSize (True) self.m_grid1.SetColLabelSizer .SetColLabelAlignment (wx.ALIGN_CENTRE, wx.ALIGN_CENTRE) # Строки self.m_grid1.EnableDragRowSize (True) self.m_grid1.SetRowLabelSize (80) self.m_grid1.SetRowLabelAlignment (wx.ALIGN_CENTRE, wx.ALIGN_CENTRE) # Внешний вид метки # Ячейки по умолчанию. ) bSizer1.Add (self.m_grid1, 0, wx.ALL, 5) self.m_staticline4 = wx.StaticLine (self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL) bSizer1.Add (self.m_staticline4, 0, wx.EXPAND | wx.ALL 5) wx.FlexGridSizer fgSizer1 = (0, 4, 0, 0) fgSizer1.SetFlexibleDirection (wx.BOTH) fgSizer1.SetNonFlexibleGrowMode (wx.FLEX_GROWMODE_SPECIFIED) self.m_staticText1 = wx.StaticText (self, wx.ID_ANY или «Product», wx.DefaultPosition, wx.DefaultSize, 0) self.m_staticText1.Wrap (-1) fgSizer1.Add (self.m_staticText1, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL, 5 ) self.m_textCtrl1 = wx.TextCtrl (self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0) fgSizer1.Add (self.m_textCtrl1, 1, wx.ALL | wx.EXPAND, 5) self .m_staticText2 = w x.StaticText (self, wx.ID_ANY или «Code», wx.DefaultPosition, wx.DefaultSize, 0) self.m_staticText2.Wrap (-1) fgSizer1.Add (self.m_staticText2, 0, wx.ALL | wx. ALIGN_CENTER_VERTICAL, 5) self.m_textCtrl2 = wx.TextCtrl (self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0) fgSizer1.Add (self.m_textCtrl2, 1, wx.ALLPAND | wAND | wx.ALIGN_BOTTOM, 5) self.m_staticText3 = wx.StaticText (self, wx.ID_ANY или «Category», wx.DefaultPosition, wx.DefaultSize, 0) self.m_staticText3.Wrap (-1) fgSizer1.Add (self. m_staticText3, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL, 5) m_comboBox1Choices = [] self.m_comboBox1 = wx.ComboBox (self, wx.ID_ANY или «Выбрать», wx.DefaultPosition, wx.DefaultSize, m_com .Add (self.m_comboBox1, 0, wx.ALL, 5) self.m_staticText4 = wx.StaticText (self, wx.ID_ANY или «Дата входа», wx.DefaultPosition, wx.DefaultSize, 0) self.m_staticText4. Wrap (-1) fgSizer1.Add (self.m_staticText4, 0, wx.ALL | wx.ALIGN_CENTER_HORIZONTAL | wx.ALIGN_CEN TER_VERTICAL, 5) self.m_datePicker1 = wx.DatePickerCtrl (self, wx.ID_ANY, wx.DefaultDateTime, wx.DefaultPosition, wx.DefaultSize, wx.DP_DEFAULT) fgSizer1.Add (self.m_datePicker1, w.x.all, 1x, wx EXPAND, 5) bSizer1.Add (fgSizer1, 1, wx.EXPAND | wx.ALL, 5) self.m_staticline3 = wx.Staticline3 (self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL) bSizer1. Добавьте (self.m_staticline3, 0, wx.EXPAND | wx.ALL, 5) bSizer2 = wx.BoxSizer (wx.HORIZONTAL) bSizer2.AddSpacer ((0, 0), 1, wx.EXPAND, 5) self.m_button4 = wx.Button (self, wx.ID_ANY или «Записать», wx.DefaultPosition, wx.DefaultSize, 0) bSizer2.Add (self.m_button4, 0, wx.ALL, 5) self.m_button5 = wx.Button (self, wx.ID_ANY или «Удалить», wx.DefaultPosition, wx.DefaultSize, 0) bSizer2.Add (self.m_button5, 0, wx.ALL, 5) bSizer1.Add (bSizer2, 1, wx.EXPAND | wx. ALL, 5) self.SetSizer (bSizer1) self.Layout () self.m_menubar1 = wx.MenuBar (0) self.m_menu1 = wx.Menu () self.m_menuItem1 = wx.MenuItem (self.m_menu1, wx.ID_ANY, или "Открыть", wx.EmptyString, wx.ITEM_NORMAL) self.m_menu1.AppendItem (self.m_menuItem1) self.m_menu1.AppendSeparator () self.m_menuItem3 = wx.MenuItem (self.m_menu1, wx.ID_ANY или «Exitt», wx. wx.ITEM_NORMAL) self.m_menu1.AppendItem (self.m_menuItem3) self.m_menubar1.Append (self.m_menu1 или "Files") self.SetMenuBar (self.m_menubar1) self.Centre (wx.BOTH) # вызов события к записи функции self.m_button4.Bind (wx.EVT_LEFT_DOWN, self.Grabar) def __del __ (self): pass # мы создаем диалоговое окно или настраиваемое сообщение def Message (self, msg, title, style): dlg = wx. MessageDialog (parent = None, message = msg, caption = title, style = style) dlg.ShowModal () dlg.Destroy () # Функция записи, которая реагирует на событие click def Запись (self, event): self.Message ("This это событие щелчка! ", " Информация - учебник ", wx.OK | wx.ICON_INFORMATION) app = wx.App (False) frame = MiForm (None) frame.Show (True) app.MainLoop () 

{title}

Далее мы протестируем то же приложение в установке Windows 7 с предварительно установленными Python и wxpython, и в результате получим следующее:

{title}

Когда мы закончим нашу полную разработку, вы можете распространять приложение, используя программное обеспечение, такое как InnoSetup, как мы видели в руководствах:

  • Создавайте установщики с помощью Inno Setup
  • Пользовательский установщик для распространения нашего программного обеспечения.

wxFormBuilder - это визуальная среда, которая дает нам возможность генерировать код Python на платформе wxPython. Другой альтернативой для разработки графических интерфейсов для Python будет выбор пользователя, использовать ли PyQt или wxPython.

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

  • 0