Разработка на приложения с Python и wxFormBuilder

{title}

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

  • Мултиплатформени приложения с Python, PyQT и QT Desginer 5
  • Приложения с Sqlite Database, 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. Използва се за проектиране на графични интерфейси GUI 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 -get update sudo apt-get get wxformbuilder 
След това трябва да добавим wxpython като променлива среда, за да можем да го използваме от всяка директория:
 export PYTHONPATH = "$ PYTHONPATH": / usr / lib / python2.7 / dist-пакети / wx-2.8-gtk2-unicode / 
След това отваряме wxFormbuilder от главното меню:

wxFormBuilder представя бюро с лява колона, където проектът или екранът и компонентите, които използваме, ще бъдат разположени, в центъра раздела за дизайн и раздел за всеки език, вдясно ще имаме свойствата както на проекта, така и на компонентите, които използваме,

{title}

Първото нещо, което ще трябва да конфигурираме, ще бъде проектът, за това кликваме върху името на проекта и след това отиваме към свойствата, където ще присвоим име и езика, който ще използваме.

{title}

След това отиваме в раздела Формуляр и добавяме формуляр, който ще бъде контейнерът на екрана.

$config[ads_text5] not found

{title}

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

Можем да отидем в раздела Python и да видим как се генерира кодът.

{title}

За да генерираме кода във файл, първо трябва да запишем проекта от менюто File> Save As и да го запишем като пример01.fbp

{title}

$config[ads_text5] not found

След това отиваме в опцията за менюто Файл> Генериране на код, след това отиваме в директорията, където запазваме файла на проекта и ще видим file noname.py

{title}

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

След това трябва да добавим кода, така че този дизайн да бъде показан, когато се изпълнява приложението. За да направите това, отваряме файла и добавяме следния код по-долу, оставайки както следва:

 import wx import wx.xrc клас MiForm (wx.Frame): def __init __ (самостоятелно, родител): wx.Frame .__ init__ (self, parent, id = wx.ID_ANY, title = u "Example01 - Tutorial", 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) Код за дизайн на крайния формуляр ## Код, който показва приложението при стартиране на 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}

След това ще добавим меню, за това отиваме в раздела Меню / лента с инструменти, първо ще добавим компонента MenuBar, който ще бъде основното меню. След това ще добавим чрез йерархия отворен Менютим, разделител и друг Menuitem с името Изход.

{title}

$config[ads_text5] not found

Можем да видим, че обектите са разположени според йерархия, където горната обхваща тези отдолу, можем да ги обменим с влачене. След това ще отидем в раздела Данни и ще добавим контрола wxGrid за показване на мрежа от данни, за тях ще бъдем поставени в Оформлението, така че следващото управление ще бъде разположено под менюто.

{title}

Генерираме новия код и файлът.py.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 ############ ################################################## ############## клас MyForm (wx.Frame): def __init __ (самостоятелно, родител): 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 (wxxST) wSxx (wxx) (wxxST) .m_grid1 = wx.grid.Grid (самостоятелно, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, 0) # Grid self.m_grid1.CreateGrid (4, 4) self.m_grid1.EnableEditing (True) self.m_grid1.EnableGridLines (Вярно) self.m_grid1.EnableDragGridSize (Грешно) self.m_grid1.SetMargins (0, 0) # Колони self.m_grid1.EnableDragColMove (False) self.m_grid1.EnableDragColSize (True) self.m_grid1.SetColLabelSizerid (30) .SetColLabelAlignment (wx.ALIGN_CENTRE, wx.ALIGN_CENTRE) # Редове self.m_grid1. ) bSizer1.Add (self.m_grid1, 0, wx.ALL, 5) self.m_staticline4 = wx.StaticLine (самостоятелно, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL) bSizer1.Add (self.m_static), 0, wx.EXPAND | wx.ALL, 5) fgSizer1 = wx.FlexGridSizer (0, 4, 0, 0) fgSizer1. (самостоятелно, wx.ID_ANY или "Продукт", 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 (самостоятелно, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0) fgSizer1.Add (self.m_textCtrl1, 1, wx.ALL | wx.EXPAND, 5) .m_staticText2 = w x.StaticText (самостоятелно, wx.ID_ANY или "код", 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 (самостоятелно, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0) fgSizer1.Add (self.m_textCtrl2 | 1, w.PAND, WP, WAND, WAND, WAND, WAND, WP, WAND, WANDP, W. WAND, W. WAND, W. WAND, W. WAND, W. WAND, W. WAND, W, W, W, W) wx.ALIGN_BOTTOM, 5) self.m_staticText3 = wx.StaticText (самостоятелно, wx.ID_ANY или „Категория“, 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 (самостоятелно, wx.ID_ANY, или „Избор“, wx.DefaultPosition, wx.DefaultSices .Add (self.m_comboBox1, 0, wx.ALL, 5) self.m_staticText4 = wx.StaticText (самостоятелно, 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 (самостоятелно, wx.ID_ANY, wx.DefaultDateTime, wx.DefaultPosition, wx.DefaultSize, wx.DP_DEFAULT) fgSizer1.Add (self.m_datePicker1, w.x.ALLX, | w.xx | EXPAND, 5) bSizer1.Add (fgSizer1, 1, wx.EXPAND | wx.ALL, 5) self.m_staticline3 = wx.StaticLine (самостоятелно, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL). Добавете (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 (самостоятелно, wx.ID_ANY или "Burn", 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. ВСИЧКИ, 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.EE wx.ITEM_NORMAL) self.m_menu1.AppendItem (self.m_menuItem3) self.m_menubar1.Append (self.m_menu1 или „Файлове“) self.SetMenuBar (self.m_menubar1) self.Centre (wx.BOTH) # щракване на събитие към записа на функцията self.m_button4.Bind (wx.EVT_LEFT_DOWN, self.Grabar) def __del __ (self): pass # създаваме диалогов прозорец или персонализирано съобщение def Съобщение (self, msg, заглавие, стил): dlg = wx. MessageDialog (родител = Няма, съобщение = msg, надпис = заглавие, стил = стил) dlg.ShowModal () dlg.Destroy () # Функция запис, която отговаря на събитието щракнете върху Def Record (самостоятелно, събитие): self.Message ("Това това е събитие с щракване! ", " Информация - ръководство ", приложение wx.OK | wx.ICON_INFORMATION) приложение = wx.App (грешно) рамка = MiForm (няма) кадър.Покажете (вярно) приложение.MainLoop () 

{title}

След това ще тестваме същото приложение в инсталация на Windows 7 с предварително инсталирани Python и wxpython и резултатът е следният:

{title}

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

  • Създавайте инсталатори с Inno Setup
  • Персонализиран инсталатор за разпространение на нашия софтуер.

wxFormBuilder е визуална среда, която ни дава възможност да генерираме Python код с платформата wxPython, друга алтернатива за разработване на графични интерфейси за Python ще бъде изборът на потребителя дали да използва PyQt или wxPython.

Едно от големите предимства на wxFormBuilder е, че той съдържа много компоненти и джаджи, много адаптивни дори повече, отколкото в други по-познати среди. Можем да виждаме резултатите, докато създаваме приложенията, така че можем да имаме различни версии на графичния интерфейс и кода, който добавяме. За разлика от Qt Designer wxFormBuilder ви позволява да генерирате събития и след това да извиквате определена функционалност.
,

  • 0