Dezvoltarea aplicațiilor cu Python și wxFormBuilder

Cuprins

Limbajul de programare Python permite adoptarea diferitelor biblioteci și cadre pentru a dezvolta interfețe grafice. Unele sunt Tinker, Wxwidget și QT, platformă pe care am văzut tutoriale:

  • Aplicații cross-platform cu Python, PyQT și QT Desginer 5
  • Aplicații cu baza de date Sqlite, PyQT și QT Desginer.

În acest tutorial vom vedea cum să dezvolți interfețe grafice cu WxWidget și instrumentul de proiectare wxFormBuilder. wxFormBuilder este o aplicație pentru proiectarea interfețelor grafice de utilizator, este gratuită și open source permite utilizarea bibliotecilor wxWidgets, este utilizată pe scară largă pentru dezvoltarea aplicațiilor multiplatformă.

wxFormBuilder este un instrument de dezvoltare vizuală. Marele avantaj este că poate genera cod în C ++, Python, PHP, Lua și XRC în timp ce este proiectat. Funcționează pe Windows, Linux și Mac OS.

Pentru acest tutorial vom face o instalare în Linux și într-o mașină virtuală cu VirtualBox și Windows 7, pentru a demonstra că putem dezvolta aplicația multiplatformă, în același mod în care am putea instala în Linux și să avem o mașină virtuală cu Linux.

Va trebui să instalăm următoarele instrumente:

PitonEste un limbaj de programare la nivel înalt, obiectivul principal al python este de a facilita lizibilitatea codului și permite programatorilor să dezvolte aplicații în mai puține linii de cod comparativ cu limbaje de programare precum C ++, C # sau Java.

Unul dintre avantajele Python este că acceptă mai multe paradigme de programare, cum ar fi programarea orientată pe obiecte, imperativă și funcțională sau procedurală. Putem descărca Python de pe site-ul oficial.

wxPythonEste multiplataforma, poate rula pe Windows, Linux și Mac OS fără modificări. Rezultatul designului interfeței este un aspect nativ al aplicației, în funcție de sistemul de operare pe care îl rulează.

Este un set de biblioteci care permit biblioteca grafică wxWidgets să fie portată și utilizată folosind limbajul de programare Python. Biblioteca wxWidgets se caracterizează prin faptul că este pe mai multe platforme.

Poate fi descărcat de pe site-ul oficial WxPython, în Linux vine în depozite sau poate fi adăugat

wxFormBuilderEste un IDE gratuit, multiplataforma și open source. Este folosit pentru a proiecta interfețe grafice GUI wxWidgets sau în acest caz wxPython, permite crearea de aplicații cross-platform. La fel ca Qt Designer, instrumentul wxFormBuilder este utilizat pentru dezvoltarea vizuală.

wxFormbuilder permite generarea de cod în cod C ++, Python, PHP, Lua și XRC. Codul este creat pe măsură ce proiectăm.

Îl putem descărca de pe site-ul său oficial, trebuie să instalăm o versiune mai mare de 3.4, care este cea care acceptă toate limbile menționate mai sus.

Exemple de aplicații cu wxPython și wxFormBuilder
În acest tutorial vom dezvolta aplicația sub Linux și apoi o vom rula și pe Windows. În Linux, Python este deja instalat, așa că vom instala wxPython și wxFormbuilder, dintr-o fereastră terminal scriem următoarea comandă:

 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 install wxformbuilder
Apoi trebuie să adăugăm wxpython ca variabilă de mediu pentru a o putea folosi din orice director:
 export PYTHONPATH = "$ PYTHONPATH": / usr / lib / python2.7 / dist-packages / wx-2.8-gtk2-unicode /
Apoi deschidem wxFormbuilder din meniul principal:

wxFormBuilder prezintă un desktop cu o coloană din stânga unde vor fi amplasați proiectul sau ecranul și componentele pe care le folosim, în centru fila de proiectare și o filă pentru fiecare limbă, în dreapta vom avea proprietățile atât ale proiectului, cât și ale componentele pe care le folosim.

Primul lucru pe care va trebui să-l configurăm va fi proiectul, pentru aceasta facem clic pe numele proiectului și apoi mergem la proprietăți unde vom atribui un nume și limba pe care o vom folosi.

Apoi mergem la fila Form și adăugăm un formular care va fi containerul ecranului.

Apoi din proprietăți putem modifica numele formularului căruia îi atribuim MyForm și titlul care va fi Exemplu 01- TutorialÎn plus, putem modifica multe opțiuni precum culoarea fundalului, dimensiunea, tipul ferestrei și multe altele.

Putem merge la fila Python și a vedea cum este generat codul.

Pentru a genera codul într-un fișier, trebuie mai întâi să salvăm proiectul din meniu Fișier> Salvare cași îl salvăm ca exemplu01.fbp

Apoi mergem la opțiunea de meniu Fișier> Generați cod, apoi mergem la directorul unde salvăm fișierul proiectului și vom vedea fișierul noname.py

Acest fișier noname.py conține codul Python generat odată cu designul interfeței, putem redenumi fișierul în example01.py

În continuare trebuie să adăugăm codul astfel încât acest design să fie afișat atunci când aplicația este executată, pentru a face acest lucru deschidem fișierul și adăugăm următorul cod mai jos, rămânând după cum urmează:

 import wx import wx.xrc class MyForm (wx.Frame): def __init __ (self, parent): 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 __ (self) : Treceți # Cod de proiectare sfârșit de formular ## Cod care afișează aplicația la executarea aplicației = wx.App (False) frame = MyForm (None) frame.Show (True) app.MainLoop ()
Apoi, dintr-o fereastră terminal, mergem în directorul aplicației și executăm python example01.py

Apoi mergem la wxFormbuilder și începem să proiectăm ecranul. Componentele sunt distribuite pe ecran folosind Layout și grile, în acest caz vom selecta un wxBoxSizer vertical, ceea ce face este să împărțim ecranul în trei rânduri, unde vom adăuga componentele.

Apoi vom adăuga un meniu, pentru aceasta mergem la fila Meniu / Bara de instrumente, mai întâi vom adăuga componenta MenuBar care va fi meniul principal. Apoi vom adăuga ierarhic un meniu deschis, un separator și un alt meniu cu numele Exit.

Putem vedea că obiectele sunt aranjate în conformitate cu o ierarhie în care cel mai înalt îl cuprinde pe cel mai jos, putem schimba poziția lor doar cu glisarea. Apoi vom merge la fila Date și vom adăuga un wxGrid control Pentru a afișa o grilă de date, pentru ele ne plasăm în Layout, astfel încât următorul control să fie situat sub meniu.

Generăm noul cod și fișierul va fi modificat noname.py, îl putem redenumi ca exemplu02.py, adăugând modificările făcute. Apoi alergăm dintr-o fereastră terminal folosind comanda:

 python example02.py

Acum mergem la wxFormbuilder și vom adăuga o bară separatoare sub grilă, din Fila comună și selectați componenta wxStaticLine.

În continuare vom crea câmpuri pentru a face un master detaliu, pentru aceasta ne vom plasa în Layout și vom adăuga o componentă.

Pe lângă proiectarea interfețelor grafice, putem adăuga evenimente, de exemplu, facem clic pe butonul de înregistrare și mergem la fila Evenimente, căutăm tipul de eveniment, în acest caz OnLeftDown, faceți clic pe butonul stâng al mouse-ului apăsat.

În acest caz, scriem numele funcției care va invoca evenimentul, atunci când generăm codul, acesta va crea doar funcția pentru noi, atunci va trebui să scriem codul cu funcționalitatea. Când am generat fișierul, vom adăuga următorul cod complet la final:

 import wx import wx.xrc import wx.grid ############################################ ###################################### Class MyFrame1 ############ ####################################################### ############### clasa 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) bSizerVERT = wx.Box. 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 ( True) self.m_grid1.EnableDragGridSize (False) self.m_grid1.SetMargins (0, 0) # Coloane self.m_grid1.EnableDragColMove (False) self.m_grid1.EnableDragColSize (True) self.m_grid1.SetColLabelMize (True) self.m_grid. SetColLabel.mSize (.SetColLabelAlignment (wx.ALIGN_CENTRE, wx.ALIGN_CENTRE) # Rânduri self.m_grid1.EnableDragRowSize (True) self.m_grid1.SetRowLabelSize (80) self.m_grid1.SetRowLabelAlignment (wx.ALIGN_CENTRE, wx.ALIGN_CENTRE) # Aspect etichetă # Default celule self.m_grid1.SetLIGNDefaultCFT .SetLignment_OPELL, w / w Valori implicite 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.DefaultPosition , wx.LI_HORIZONTAL) bSizer1.Add (self.m_staticline4, 0, wx.EXPAND | wx.ALL, 5) fgSizer1 = wx.FlexGridSizer (0, 4, 0, 0) fgSizer1.SetFlexibleDirection (wx.BOTH) fgSizer1.SetN (wx.FLEX_GROWMODE1_SPECIFIED) selfText.SelfText. (self, wx.ID_ANY, u "Produs", 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, 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, 1, wx.EXPAND | wx | wx.ALLPAND | wx.ALIGN_BOTTOM, 5) self.m_staticText3 = wx.StaticText (self, wx.ID_ANY, u "Category", wx.DefaultPosition, wx.DefaultSize, 0) self.m_staticText3.Wrap (-1) fgSizer1. Adăugați (self. M_staticText3, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL, 5) m_comboBox1Choices = [] self.m_comboBox1 = wx.ComboBox (self, wx.ID_ANY, u "Select", wx.DefaultPosition, wx.Default, wx.Default ) .Adăugați (self.m_comboBox1, 0, wx.ALL, 5) self.m_staticText4 = wx.StaticText (self, wx.ID_ANY, u "Data intrării", 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_datePickerALL1, 1. 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) bSizer1. Adăugați (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 "Delete", 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 „Deschis”, 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 "Exit", wx.EmptyS Gol .ITEM_NORMAL) self.m_menu1.AppendItem (self.m_menuItem3) self.m_menubar1.Append (self.m_menu1, sau „Fișiere”) self.SetMenuBar (self.m_menubar1) self.Centre (wx.BOTH) funcție de înregistrare self.m_button4.Bind (wx.EVT_LEFT_DOWN, self.Record) def __del __ (self): treceți # creați un mesaj personalizat sau o casetă de dialog def Mesaj (auto, msg, titlu, stil): dlg = wx.MessageDialog ( părinte = Niciunul, mesaj = msg, subtitrare = titlu, stil = stil) dlg.ShowModal () dlg.Destroy () # Funcția de înregistrare care răspunde la eveniment faceți clic def Înregistrați (auto, eveniment): self.Message („Acesta este un clic! eveniment "," Informații - Tutorial ", wx.OK | wx.ICON_INFORMATION) app = wx.App (False) frame = MyForm (None) frame.Show (True) app.MainLoop () 

În continuare vom testa aceeași aplicație într-o instalare Windows 7 cu Python și wxpython instalate anterior și rezultatul este următorul:

Când finalizăm dezvoltarea noastră completă, aplicația poate fi distribuită folosind software cum ar fi InnoSetup așa cum am văzut în tutoriale:

  • Creați instalatori cu Inno Setup
  • Instalator personalizat pentru a distribui software-ul nostru.

wxFormBuilder este un mediu vizual care ne permite să generăm cod Python cu platforma wxPython, o altă alternativă pentru a dezvolta interfețe grafice pentru Python va depinde de utilizator dacă va folosi PyQt sau wxPython.

Unul dintre marile avantaje ale wxFormBuilder este că conține multe componente și widget-uri, foarte personalizabile chiar mai mult decât în ​​alte medii mai populare. Putem vedea rezultatele pe măsură ce creăm aplicațiile, astfel încât să putem avea diferite versiuni ale interfeței grafice și a codului pe care îl adăugăm. Spre deosebire de Qt Designer, wxFormBuilder permite generarea de evenimente și apoi invocarea unei anumite funcționalități.
.

V-a plăcut și ați ajutat acest tutorial?Puteți recompensa autorul apăsând acest buton pentru a-i oferi un punct pozitiv

Vei ajuta la dezvoltarea site-ului, partajarea pagina cu prietenii

wave wave wave wave wave