Utveckla applikationer med Python och wxFormBuilder

Innehållsförteckning

Python -programmeringsspråket tillåter användning av olika bibliotek och ramverk för att utveckla grafiska gränssnitt. Några är Tinker, Wxwidget och QT, plattform där vi såg självstudierna:

  • Plattformsoberoende applikationer med Python, PyQT och QT Desginer 5
  • Applikationer med Sqlite Database, PyQT och QT Desginer.

I denna handledning kommer vi att se hur man utvecklar grafiska gränssnitt med WxWidget och designverktyget wxFormBuilder. wxFormBuilder är ett program för utformning av grafiska användargränssnitt, det är gratis och öppen källkod gör det möjligt att använda wxWidgets -biblioteken, det används ofta för utveckling av applikationer med flera plattformar.

wxFormBuilder är ett visuellt utvecklingsverktyg. Den stora fördelen är att den kan generera kod i C ++, Python, PHP, Lua och XRC medan den designas. Det fungerar på Windows, Linux och Mac OS.

För denna handledning kommer vi att göra en installation i Linux och i en virtuell maskin med VirtualBox och Windows 7, för att bevisa att vi kan utveckla multiplatform -applikationen, på samma sätt som vi kan installera i Linux och ha en virtuell maskin med Linux.

Vi kommer att behöva installera följande verktyg:

PytonormDet är ett programmeringsspråk på hög nivå, huvudsyftet med python är att underlätta kodens läsbarhet och gör det möjligt för programmerare att utveckla applikationer i färre kodrader jämfört med programmeringsspråk som C ++, C # eller Java.

En av fördelarna med Python är att den stöder flera programmeringsparadigm, såsom objektorienterad, imperativ och funktionell eller procedurell programmering. Vi kan ladda ner Python från den officiella webbplatsen.

wxPythonDet är plattformsoberoende, det kan köras på Windows, Linux och Mac OS utan ändringar. Resultatet av gränssnittsdesignen är applikationens ursprungliga utseende beroende på vilket operativsystem det körs.

Det är en uppsättning bibliotek som gör att grafiska biblioteket wxWidgets kan portas och användas med programmeringsspråket Python. WxWidgets-biblioteket kännetecknas av att det är plattformsoberoende.

Det kan laddas ner från den officiella WxPython -webbplatsen, i Linux kommer det i lagren eller det kan läggas till

wxFormBuilderDet är en gratis, plattformsoberoende och öppen källkod IDE. Det används för att designa grafiska gränssnitt GUI wxWidgets eller i detta fall wxPython, det tillåter skapande av plattformsoberoende applikationer. Precis som Qt Designer används verktyget wxFormBuilder för visuell utveckling.

wxFormbuilder gör det möjligt att generera kod i C ++, Python, PHP, Lua och XRC -kod. Koden skapas när vi designar.

Vi kan ladda ner den från dess officiella webbplats, vi måste installera en version högre än 3.4 som är den som stöder alla de språk som nämns ovan.

Exempel på applikationer med wxPython och wxFormBuilder
I denna handledning kommer vi att utveckla programmet under Linux och sedan kör vi det också på Windows. I Linux är python redan installerat så vi kommer att installera wxPython och wxFormbuilder, från ett terminalfönster skriver vi följande kommando:

 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 -få uppdatering sudo apt-get install wxformbuilder
Då måste vi lägga till wxpython som en miljövariabel för att kunna använda den från valfri katalog:
 export PYTHONPATH = "$ PYTHONPATH": / usr / lib / python2.7 / dist-packages / wx-2.8-gtk2-unicode /
Därefter öppnar vi wxFormbuilder från huvudmenyn:

wxFormBuilder presenterar ett skrivbord med en vänster kolumn där projektet eller skärmen och komponenter som vi använder kommer att placeras, i mitten designfliken och en flik för varje språk, till höger har vi egenskaperna för både projektet och komponenter som vi använder.

Det första vi måste konfigurera är projektet, för detta klickar vi på projektets namn och sedan går vi till egenskaperna där vi kommer att tilldela ett namn och det språk som vi kommer att använda.

Därefter går vi till fliken Form och lägger till ett formulär som kommer att vara skärmens behållare.

Från egenskaperna kan vi sedan ändra namnet på formuläret som vi tilldelar MyForm och titeln som kommer att vara Exempel01- HandledningDessutom kan vi ändra många alternativ som bakgrundsfärg, storlek, fönstertyp och många fler.

Vi kan gå till fliken Python och se hur koden genereras.

För att generera koden i en fil måste vi först spara projektet från menyn Arkiv> Spara som, och vi sparar det som exempel01.fbp

Därefter går vi till menyalternativet Arkiv> Generera kod, sedan går vi till katalogen där vi sparar projektfilen och vi kommer att se filen noname.py

Denna noname.py -fil innehåller Python -koden som genereras med gränssnittsdesignen, vi kan byta namn på filen till example01.py

Därefter måste vi lägga till koden så att den här designen visas när programmet körs. För att göra detta öppnar vi filen och lägger till följande kod nedan, kvarvarande enligt följande:

 import wx import wx.xrc klass MyForm (wx.Frame): def __init __ (self, parent): wx.Frame .__ init__ (self, parent, id = wx.ID_ANY, title = u "Exempel01 - självstudie", pos = wx .DefaultPosition, storlek = wx.Size (500.300), style = wx.DEFAULT_FRAME_STYLE | wx.TAB_TRAVERSAL) self.SetSizeHintsSz (wx.DefaultSize, wx.DefaultSize) self.Centre (wx.BOTH) def __del __del : Pass # Slut på formulärdesignkod ## Kod som visar applikationen när du kör app = wx.App (False) frame = MyForm (None) frame.Show (True) app.MainLoop ()
Sedan går vi från ett terminalfönster till applikationskatalogen och kör python example01.py

Därefter går vi till wxFormbuilder och börjar designa skärmen. Komponenterna distribueras på skärmen med layout och rutnät, i det här fallet väljer vi en vertikal wxBoxSizer, vad det gör är att dela upp skärmen i tre rader, där vi kommer att lägga till komponenterna.

Därefter lägger vi till en meny, för detta går vi till fliken Meny / Verktygsfält, först lägger vi till menyraden som kommer att vara huvudmenyn. Sedan kommer vi hierarkiskt att lägga till ett öppet menutitem, en separator och ett annat menuitem med namnet Exit.

Vi kan se att objekten är ordnade enligt en hierarki där den högsta omfattar den lägsta, vi kan utbyta deras position med bara dra. Sedan går vi till fliken Data och vi lägger till en wxGrid -kontroll För att visa ett datanät placerar vi oss själva i layouten för att nästa kontroll kommer att ligga under menyn.

Vi genererar den nya koden och filen kommer att ändras noname.py, kan vi byta namn på det som example02.py och lägga till de ändringar som gjorts. Sedan kör vi från ett terminalfönster med kommandot:

 python exempel02.py

Nu ska vi wxFormbuilder och vi lägger till en separatorfält under rutnätet från Vanlig flik och välj komponenten wxStaticLine.

Därefter skapar vi fält för att göra en detaljmästare, för detta placerar vi oss i layouten och lägger till en komponent.

Förutom att utforma grafiska gränssnitt kan vi lägga till händelser, till exempel klickar vi på inspelningsknappen och går till fliken Händelser, vi letar efter typ av händelse, i det här fallet OnLeftDown, klicka på vänster musknapp.

I det här fallet skriver vi namnet på funktionen som kommer att påkalla händelsen, när koden genereras kommer den bara att skapa funktionen för oss, då måste vi skriva koden med funktionaliteten. När vi har skapat filen kommer vi att lägga till följande fullständiga kod i slutet:

 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) bSizerVER1 = wx.Tx.ALX) 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) # Columns self.m_grid1.EnableDragColMove (False) self.m_grid1.EnableDragColSize (True) self.m_grid1.SetColLabelMize (True) SetColLabel.mSize (.SetColLabelAlignment (wx.ALIGN_CENTRE, wx.ALIGN_CENTRE) # Rader self.m_grid1.EnableDragRowSize (True) self.m_grid1.SetRowLabelSize (80) self.m_grid1.SetRowLabelAlignment (wx.ALIGN_CENTRE, wx.ALIGN_CENTRE) # Etikettutseende # Cell Defaults self.m_grid1.SetLIGN. .SetLignment_OPELL, w / w Standardvärden w / wm_grid1.SetLIGNDefaultCell_FT) bSizer1.Add (self.m_grid1, 0, wx.ALL, 5) self.m_staticline4 = wx.StaticLine (self, wx.ID_ANY, wx.DefaultDr. , 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.Set (wx.FLEX_GROWMODE1_SPECIFIED) selfText.SelfText. (self, wx.ID_ANY, u "Product", wx.DefaultPosition, wx.DefaultSize, 0) self.m_staticText1.Wrap (-1) fgSizer1.Te (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 (self.m_textCtrl1, 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.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. Lägg till (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.ef ) .Add (self.m_comboBox1, 0, wx.ALL, 5) self.m_staticText4 = wx.StaticText (self, wx.ID_ANY, u "Date of entry", 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, wx. 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. Lägg till (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 "Radera", 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 "Öppna", 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. Tom .ITEM_NORMAL) self.m_menu1.AppendItem (self.m_menuItem3) self.m_menubar1.Append (self.m_menu1 eller "Filer") self.SetMenuBar (self.m_menubar1) self.Centre (wx.BOTH) # klick händelse som åberopar händelsen funktionsrekord self.m_button4.Bind (wx.EVT_LEFT_DOWN, self.Record) def __del __ (self): pass # skapa ett anpassat meddelande eller en dialogruta def Message (self, msg, title, style): dlg = wx.MessageDialog ( parent = None, meddelande = msg, caption = title, style = style) dlg.ShowModal () dlg.Destroy () # Inspelningsfunktion som svarar på händelsen klicka def Record (self, event): self.Message ("This is en klick! -händelse "," Information - Handledning ", wx.OK | wx.ICON_INFORMATION) app = wx.App (False) frame = MyForm (None) frame.Show (True) app.MainLoop () 

Därefter kommer vi att testa samma applikation i en Windows 7 -installation med Python och wxpython tidigare installerat och resultatet är följande:

När vi har avslutat vår fullständiga utveckling kan applikationen distribueras med programvara som InnoSetup som vi hade sett i självstudierna:

  • Skapa installatörer med Inno Setup
  • Anpassat installationsprogram för att distribuera vår programvara.

wxFormBuilder är en visuell miljö som gör att vi kan generera Python -kod med wxPython -plattformen, ett annat alternativ för att utveckla grafiska gränssnitt för Python är upp till användaren om han ska använda PyQt eller wxPython.

En av de stora fördelarna med wxFormBuilder är att den innehåller många komponenter och widgets, mycket anpassningsbara ännu mer än i andra mer populära miljöer. Vi kan se resultaten när vi skapar applikationerna, så vi kan ha olika versioner av det grafiska gränssnittet och koden som vi lägger till. Till skillnad från Qt Designer tillåter wxFormBuilder att generera händelser och sedan åberopa en viss funktionalitet.
.

Gillade du och hjälpte denna handledning?Du kan belöna författaren genom att trycka på den här knappen för att ge honom en positiv poäng

Du kommer att bidra till utvecklingen av webbplatsen, dela sidan med dina vänner

wave wave wave wave wave