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

Съдържание

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

  • Кросплатформени приложения с Python, PyQT и QT Desginer 5
  • Приложения с Sqlite база данни, PyQT и QT Desginer.

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

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

За този урок ще направим инсталация в Linux и във виртуална машина с VirtualBox и Windows 7, за да докажем, че можем да разработим мултиплатформеното приложение, по същия начин, по който бихме могли да инсталираме в Linux и да имаме виртуална машина с Linux.

Ще трябва да инсталираме следните инструменти:

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

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

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

Това е набор от библиотеки, които позволяват графичната библиотека на wxWidgets да бъде пренесена и използвана с помощта на езика за програмиране на Python. Библиотеката wxWidgets се характеризира с това, че е междуплатформена.

Той може да бъде изтеглен от официалния уебсайт на WxPython, в Linux той идва в хранилищата или може да бъде добавен

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 -получете актуализация sudo apt-get install wxformbuilder
След това трябва да добавим wxpython като променлива на среда, за да можем да го използваме от всяка директория:
 експортиране PYTHONPATH = "$ PYTHONPATH": / usr / lib / python2.7 / dist-packages / wx-2.8-gtk2-unicode /
След това отваряме wxFormbuilder от главното меню:

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

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

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

След това от свойствата можем да променим името на формата, на която присвояваме MyForm, и заглавието, което ще бъде Пример01- УрокВ допълнение, можем да променим много опции, като например цвета на фона, размера, вида на прозореца и много други.

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

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

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

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

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

 import wx import wx.xrc class MyForm (wx.Frame): def __init __ (self, parent): wx.Frame .__ init__ (self, parent, id = wx.ID_ANY, title = u "Пример01 - Урок", поз. = wx .DefaultPosition, размер = wx.Size (500,300), style = wx.DEFAULT_FRAME_STYLE | wx.TAB_TRAVERSAL) self.SetSizeHintsSz (wx.DefaultSize, wx.DefaultSize) self.Centre (wx.BOTH) def __del__ : Предайте # Край на кода за дизайн на формуляр ## Код, който показва приложението при изпълнение на app = wx.App (False) frame = MyForm (None) frame. Show (True) app.MainLoop ()
След това от терминален прозорец отиваме в директорията на приложението и изпълняваме python example01.py

След това отиваме на wxFormbuilder и започваме да проектираме екрана. Компонентите се разпределят на екрана с помощта на Layout и решетки, в този случай ще изберем вертикален wxBoxSizer, това, което прави, е да раздели екрана на три реда, където ще добавим компонентите.

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

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

Ние генерираме новия код и файлът ще бъде променен noname.py, можем да го преименуваме като example02.py, като добавим направените промени. След това бягаме от терминален прозорец с помощта на командата:

 python example02.py

Сега отиваме да wxFormbuilder и ще добавим разделителна лента под решетката, от Общ раздел и изберете компонента wxStaticLine.

След това ще създадем полета, за да направим детайлен майстор, за това ще се поставим в Layout и ще добавим компонент.

В допълнение към проектирането на графични интерфейси можем да добавяме събития, например кликваме върху бутона за запис и отиваме в раздела Събития, търсим типа на събитието, в този случай OnLeftDown, щракнете с левия бутон на мишката натиснат.

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

 внос wx внос wx.xrc внос wx.grid ######################################## ###################################### Клас MyFrame1 ########### ################################################# ############### клас MyForm (wx.Frame): def __init __ (self, родител): wx.Frame .__ init__ (self, parent, id = wx.ID_ANY, title = wx. EmptyString, pos = wx.DefaultPosition, размер = wx.Size (417,350), style = wx.DEFAULT_FRAME_STYLE | wx.TAB_TRAVERSAL) self.SetSizeHintsSz (wx.DefaultSize, wx.DefaultSize) bSizerVX1 m_grid1 = wx.grid.Grid (self, 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 (False) self.m_grid1.SetMargins (0, 0) # Columns self.m_grid1.EnableDragColMove (False) self.m_grid1.EnableDragColSize (True) self.m_grid1.SetColLabelMize1 (True) self. SetColLabel.mSize (.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) # Външен вид на етикета # По подразбиране на клетката .SetLignment_OPELL, w / w По подразбиране w / wm_grid1.SetLIGNDefaultCell_FT) bSizer1.Add (self.m_grid1, 0, wx.ALL, 5) self.m_staticline4 = wx.StaticLine (self, wx.ID_ANY, wx.DefaultPosition, , wx.LI_HORIZONTAL) bSizer1.Add (self.m_staticline4, 0, wx.EXPAND | wx.ALL, 5) fgSizer1 = wx.FlexGridSizer (0, 4, 0, 0) fgSizer1.SetFlexDirection (wx.BOTH) fgSonger (wx.FLEX_GROWMODE1_SPECIFIED) selfText.SelfText. (self, wx.ID_ANY, u „Продукт“, wx.DefaultPosition, wx.DefaultSize, 0) self.m_staticText1.Wrap (-1) fgSizer1.Add (self.m_static,, 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 (selfx.mtext, ALL | wx.EXPAND, 5) self .m_staticText2 = w x.StaticText (self, wx.ID_ANY, u "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, PX | wx. wx.ALLPAND | wx.ALIGN_BOTTOM, 5) self.m_staticText3 = wx.StaticText (self, wx.ID_ANY, u "Категория", wx.DefaultPosition, wx.DefaultSize, 0) self.m_staticText3.Wrap (-1) fgSizer1. Добавяне (self. M_staticText3, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL, 5) m_comboBox1Choices = [] self.m_comboBox1 = wx.ComboBox (self, wx.ID_ANY, u "Избор", wx.DefaultPosition, wBx.De, ) .Add (self.m_comboBox1, 0, wx.ALL, 5) self.m_staticText4 = wx.StaticText (self, wx.ID_ANY, u "Дата на влизане", wx.DefaultPosition, wx.DefaultSize, 0) self.m_staticText4 . Wrap (-1) fgSizer1.Add (self.m_staticText4, 0, wx.ALL | wx.ALIGN_CENTER_HORIZONTAL | wx.ALIGN_CENTE R_VERTICAL, 5) self.m_datePicker1 = wx.DatePickerCtrl (self, wx.ID_ANY, wx.DefaultDateTime, wx.DefaultPosition, wx.DefaultSize, wx.DP_DEFAULT) fgSizer1.Add (self.m_daxPic. EXPAND, 5) bSizer1.Add (fgSizer1, 1, wx.EXPAND | wx.ALL, 5) self.m_staticline3 = wx.StaticLine (self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL) bSizer Добавяне (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, u "Burn", wx.DefaultPosition, wx.DefaultSize, 0) bSizer2.Add (self.m_button4, 0, wx.ALL, 5) self.m_button5 = wx.Button (self , wx.ID_ANY, u "Изтриване", 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, u "Отваряне", 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, u "Изход", wx.EmptyString, Празен .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.Record) def __del __ (self): pass # създаване на персонализирано съобщение или диалогов прозорец def Message (self, msg, title, style): dlg = wx.MessageDialog ( родител = Няма, съобщение = msg, надпис = заглавие, стил = стил) dlg.ShowModal () dlg.Destroy () # Функция за запис, която отговаря на събитието, щракнете def Запис (себе си, събитие): self.Message ("Това е събитие с щракване! "," Информация - Урок ", wx.OK | wx.ICON_INFORMATION) app = wx.App (False) frame = MyForm (None) frame.Show (True) app.MainLoop () 

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

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

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

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

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

Хареса ли ви и помогнахте на този урок?Можете да възнаградите автора, като натиснете този бутон, за да му дадете положителна точка

Така ще помогнете за развитието на сайта, сподели с приятелите си

wave wave wave wave wave