Udvikling af applikationer med Python og wxFormBuilder

Indholdsfortegnelse

Python -programmeringssproget tillader vedtagelse af forskellige biblioteker og rammer at udvikle grafiske grænseflader. Nogle er Tinker, Wxwidget og QT, platform, hvor vi så tutorials:

  • Cross-platform applikationer med Python, PyQT og QT Desginer 5
  • Applikationer med Sqlite Database, PyQT og QT Desginer.

I denne tutorial ser vi hvordan man udvikler grafiske grænseflader med WxWidget og wxFormBuilder designværktøj. wxFormBuilder er et program til design af grafiske brugergrænseflader, det er gratis og open source giver mulighed for at bruge wxWidgets biblioteker, det er meget udbredt til udvikling af multiplatform -applikationer.

wxFormBuilder er et visuelt udviklingsværktøj. Den store fordel er, at det kan generere kode i C ++, Python, PHP, Lua og XRC, mens det bliver designet. Det fungerer på Windows, Linux og Mac Os.

Til denne vejledning foretager vi en installation i Linux og i en virtuel maskine med VirtualBox og Windows 7 for at bevise, at vi kan udvikle multiplatform -applikationen, på samme måde som vi kunne installere i Linux og have en virtuel maskine med Linux.

Vi skal installere følgende værktøjer:

PythonDet er et programmeringssprog på højt niveau, hovedformålet med python er at lette kodens læsbarhed og giver programmerere mulighed for at udvikle applikationer i færre kodelinjer sammenlignet med programmeringssprog som C ++, C # eller Java.

En af fordelene ved Python er, at den understøtter flere programmeringsparadigmer, såsom objektorienteret, imperativ og funktionel eller proceduremæssig programmering. Vi kan downloade Python fra det officielle websted.

wxPythonDet er tværplatform, det kan køre på Windows, Linux og Mac OS uden ændringer. Resultatet af interface -designet er et oprindeligt udseende af applikationen afhængigt af det operativsystem, det kører.

Det er et sæt biblioteker, der tillader wxWidgets grafiske bibliotek at blive portet og brugt ved hjælp af programmeringssproget Python. WxWidgets-biblioteket er kendetegnet ved at være tværgående.

Det kan downloades fra det officielle WxPython -websted, i Linux kommer det i lagrene, eller det kan tilføjes

wxFormBuilderDet er en gratis, cross-platform og open source IDE. Det bruges til at designe grafiske grænseflader GUI wxWidgets eller i dette tilfælde wxPython, det tillader oprettelse af cross-platform applikationer. Ligesom Qt Designer bruges wxFormBuilder -værktøjet til visuel udvikling.

wxFormbuilder giver mulighed for at generere kode i C ++, Python, PHP, Lua og XRC kode. Koden oprettes, når vi designer.

Vi kan downloade det fra dets officielle websted, vi skal installere en version højere end 3.4, som er den, der understøtter alle de ovennævnte sprog.

Applikationseksempler med wxPython og wxFormBuilder
I denne vejledning udvikler vi applikationen under Linux, og derefter kører vi det også på Windows. I Linux er python allerede installeret, så vi installerer wxPython og wxFormbuilder, fra et terminalvindue skriver vi følgende 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 -hent opdatering sudo apt-get install wxformbuilder
Derefter skal vi tilføje wxpython som en miljøvariabel for at kunne bruge den fra en hvilken som helst mappe:
 eksport PYTHONPATH = "$ PYTHONPATH": / usr / lib / python2.7 / dist-packages / wx-2.8-gtk2-unicode /
Dernæst åbner vi wxFormbuilder fra hovedmenuen:

wxFormBuilder præsenterer et skrivebord med en venstre kolonne, hvor projektet eller skærmen og komponenter, vi bruger, vil være placeret, i midten fanen design og en fane for hvert sprog, til højre har vi egenskaberne for både projektet og komponenter, som vi bruger.

Den første ting, vi skal konfigurere, er projektet, for dette klikker vi på projektets navn, og derefter går vi til egenskaberne, hvor vi vil tildele et navn og det sprog, vi vil bruge.

Dernæst går vi til fanen Formular og tilføjer en formular, der vil være beholderen på skærmen.

Fra egenskaberne kan vi derefter ændre navnet på den formular, som vi tildeler MyForm og den titel, der vil være Eksempel01- VejledningDerudover kan vi ændre mange muligheder som baggrundsfarve, størrelse, vinduetype og mange flere.

Vi kan gå til fanen Python og se, hvordan koden genereres.

For at generere koden i en fil skal vi først gemme projektet fra menuen Fil> Gem som, og vi gemmer det som eksempel01.fbp

Dernæst går vi til menuen Fil> Generer kode, så går vi til biblioteket, hvor vi gemmer projektfilen, og vi vil se filen noname.py

Denne noname.py -fil indeholder Python -koden, der er genereret med interface -designet, vi kan omdøbe filen til eksempel01.py

Dernæst skal vi tilføje koden, så dette design vises, når applikationen udføres. For at gøre dette åbner vi filen og tilføjer følgende kode nedenfor, og forbliver som følger:

 import wx import wx.xrc klasse 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 __ : Pass # Slut på formulardesignkode ## Kode, der viser applikationen, når der udføres app = wx.App (False) frame = MyForm (None) frame.Show (True) app.MainLoop ()
Derefter går vi fra et terminalvindue til applikationsmappen og udfører python example01.py

Dernæst går vi til wxFormbuilder og begynder at designe skærmen. Komponenterne fordeles på skærmen ved hjælp af Layout og gitre, i dette tilfælde vil vi vælge en lodret wxBoxSizer, hvad det gør er at opdele skærmen i tre rækker, hvor vi tilføjer komponenterne.

Dernæst tilføjer vi en menu, til dette går vi til fanen Menu / Toolbar, først tilføjer vi den MenuBar -komponent, der vil være hovedmenuen. Derefter tilføjer vi hierarkisk en åben menutitem, en separator og en anden menuitem med navnet Exit.

Vi kan se, at objekterne er arrangeret efter et hierarki, hvor det højeste omfatter det laveste, vi kan udveksle deres position med bare at trække. Derefter går vi til fanen Data og vi tilføjer en wxGrid -kontrol For at vise et datagitter placerer vi os selv i layoutet, så den næste kontrol vil være placeret under menuen.

Vi genererer den nye kode, og filen ændres noname.py, vi kan omdøbe det til example02.py og tilføje de foretagne ændringer. Derefter kører vi fra et terminalvindue ved hjælp af kommandoen:

 python eksempel02.py

Nu skal vi wxFormbuilder og vi tilføjer en skillelinje under gitteret fra Fælles fane og vælg komponenten wxStaticLine.

Dernæst vil vi oprette felter for at gøre en detaljeret mester, for dette vil vi placere os selv i layoutet og tilføje en komponent.

Udover at designe grafiske grænseflader kan vi tilføje begivenheder, for eksempel klikker vi på optageknappen og går til fanen Begivenheder, vi leder efter hændelsestypen, i dette tilfælde OnLeftDown, klik på venstre museknap trykket ned.

I denne hændelse skriver vi navnet på den funktion, der vil påkalde hændelsen, når koden genereres, vil den kun oprette funktionen for os, så bliver vi nødt til at skrive koden med funktionaliteten. Når vi har genereret filen, tilføjer vi følgende komplette kode til slutningen:

 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) # Rækker self.m_grid1.EnableDragRowSize (True) self.m_grid1.SetRowLabelSize (80) self.m_grid1.SetRowLabelAlignment (wx.ALIGN_CENTRE, wx.ALIGN_CENTRE) # Label Appearance # Cell Defaults self.m_grid1.SetLIGN. .SetLignment_OPELL, m / w Standardværdier 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. Tilføj (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, wx1_ ) .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. Tilføj (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 "Slet", 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 "Åbn", 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) # klik begivenhed påberåber funktionsrekord self.m_button4.Bind (wx.EVT_LEFT_DOWN, self.Record) def __del __ (self): pass # opret en brugerdefineret besked eller dialogboks def Besked (self, msg, title, style): dlg = wx.MessageDialog ( parent = None, message = msg, caption = title, style = style) dlg.ShowModal () dlg.Destroy () # Optagefunktion, der reagerer på hændelsen klik def Record (self, event): self.Message ("This is et klik! event "," Information - Tutorial ", wx.OK | wx.ICON_INFORMATION) app = wx.App (False) frame = MyForm (None) frame.Show (True) app.MainLoop () 

Dernæst skal vi teste det samme program i en Windows 7 -installation med Python og wxpython tidligere installeret, og resultatet er følgende:

Når vi er færdige med vores fulde udvikling, kan applikationen distribueres ved hjælp af software som InnoSetup, som vi havde set i selvstudierne:

  • Opret installatører med Inno Setup
  • Brugerdefineret installationsprogram til at distribuere vores software.

wxFormBuilder er et visuelt miljø, der giver os mulighed for at generere Python -kode med wxPython -platformen, et andet alternativ til at udvikle grafiske grænseflader til Python vil være op til brugeren, om han skal bruge PyQt eller wxPython.

En af de store fordele ved wxFormBuilder er, at den indeholder mange komponenter og widgets, der kan tilpasses meget mere end i andre mere populære miljøer. Vi kan se resultaterne, mens vi opretter applikationerne, så vi kan have forskellige versioner af den grafiske grænseflade og den kode, vi tilføjer. I modsætning til Qt Designer tillader wxFormBuilder at generere begivenheder og derefter påberåbe en bestemt funktionalitet.
.

Kan du lide og hjælpe denne vejledning?Du kan belønne forfatteren ved at trykke på denne knap for at give ham et positivt punkt

Du vil bidrage til udviklingen af ​​hjemmesiden, at dele siden med dine venner

wave wave wave wave wave