Utvikling av applikasjoner med Python og wxFormBuilder

Innholdsfortegnelse

Python -programmeringsspråket tillater adopsjon av forskjellige biblioteker og rammer for å utvikle grafiske grensesnitt. Noen er Tinker, Wxwidget og QT, plattformen som vi så opplæringen på:

  • Tverrplattformapplikasjoner med Python, PyQT og QT Desginer 5
  • Applikasjoner med Sqlite Database, PyQT og QT Desginer.

I denne opplæringen får vi se hvordan du utvikler grafiske grensesnitt med WxWidget og wxFormBuilder designverktøy. wxFormBuilder er et program for utforming av grafiske brukergrensesnitt, det er gratis og åpen kildekode lar deg bruke wxWidgets -bibliotekene, det er mye brukt for utvikling av multiplatform -applikasjoner.

wxFormBuilder er et visuelt utviklingsverktøy. Den store fordelen er at den kan generere kode i C ++, Python, PHP, Lua og XRC mens den blir designet. Det fungerer på Windows, Linux og Mac Os.

For denne opplæringen vil vi gjøre en installasjon i Linux og i en virtuell maskin med VirtualBox og Windows 7, for å bevise at vi kan utvikle multiplatform -applikasjonen, på samme måte som vi kan installere i Linux og ha en virtuell maskin med Linux.

Vi må installere følgende verktøy:

PythonDet er et programmeringsspråk på høyt nivå, hovedmålet med python er å lette lesbarheten av koden og lar programmerere utvikle applikasjoner i færre kodelinjer sammenlignet med programmeringsspråk som C ++, C # eller Java.

En av fordelene med Python er at den støtter flere programmeringsparadigmer, for eksempel objektorientert, imperativ og funksjonell eller prosessuell programmering. Vi kan laste ned Python fra det offisielle nettstedet.

wxPythonDet er plattformsbasert, det kan kjøres på Windows, Linux og Mac OS uten endringer. Resultatet av grensesnittdesignet er et opprinnelig utseende av programmet avhengig av operativsystemet det kjører.

Det er et sett med biblioteker som gjør at wxWidgets grafiske bibliotek kan portes og brukes ved hjelp av programmeringsspråket Python. WxWidgets-biblioteket er preget av å være plattformplattform.

Den kan lastes ned fra det offisielle WxPython -nettstedet, i Linux kommer den i depotene eller den kan legges til

wxFormBuilderDet er en gratis, plattform-åpen og åpen kildekode IDE. Den brukes til å designe grafiske grensesnitt GUI wxWidgets eller i dette tilfellet wxPython, det tillater opprettelse av plattformsapplikasjoner. I likhet med Qt Designer, brukes wxFormBuilder -verktøyet for visuell utvikling.

wxFormbuilder lar deg generere kode i C ++, Python, PHP, Lua og XRC -kode. Koden opprettes mens vi designer.

Vi kan laste den ned fra det offisielle nettstedet, vi må installere en versjon som er høyere enn 3.4, som er den som støtter alle språkene nevnt ovenfor.

Applikasjonseksempler med wxPython og wxFormBuilder
I denne opplæringen vil vi utvikle programmet under Linux, og deretter vil vi også kjøre det på Windows. I Linux er python allerede installert, så vi vil installere wxPython og wxFormbuilder, fra et terminalvindu 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 oppdatering sudo apt-get install wxformbuilder
Deretter må vi legge til wxpython som en miljøvariabel for å kunne bruke den fra en hvilken som helst katalog:
 eksport PYTHONPATH = "$ PYTHONPATH": / usr / lib / python2.7 / dist-packages / wx-2.8-gtk2-unicode /
Deretter åpner vi wxFormbuilder fra hovedmenyen:

wxFormBuilder presenterer et skrivebord med en venstre kolonne der prosjektet eller skjermen og komponentene vi bruker vil være plassert, i midten designfanen og en fane for hvert språk, til høyre vil vi ha egenskapene til både prosjektet og komponenter som vi bruker.

Det første vi må konfigurere er prosjektet. For dette klikker vi på navnet på prosjektet, og deretter går vi til egenskapene der vi vil tildele et navn og språket vi skal bruke.

Deretter går vi til kategorien Skjema og legger til et skjema som vil være beholderen på skjermen.

Fra egenskapene kan vi deretter endre navnet på skjemaet som vi tildeler MyForm og tittelen som vil være Eksempel01- OpplæringI tillegg kan vi endre mange alternativer som bakgrunnsfarge, størrelse, vindustype og mange flere.

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

For å generere koden i en fil, må vi først lagre prosjektet fra menyen Fil> Lagre som, og vi lagrer det som eksempel01.fbp

Deretter går vi til menyalternativet Fil> Generer kode, så går vi til katalogen der vi lagrer prosjektfilen, og vi vil se filen noname.py

Denne noname.py -filen inneholder Python -koden som er generert med grensesnittdesignet, vi kan gi filen nytt navn til example01.py

Deretter må vi legge til koden slik at dette designet vises når programmet kjøres. For å gjøre dette åpner vi filen og legger til følgende kode nedenfor, og forblir som følger:

 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) self __del __del : Pass # End of Form design code ## Code that shows the application when executing app = wx.App (False) frame = MyForm (None) frame.Show (True) app.MainLoop ()
Fra et terminalvindu går vi til applikasjonskatalogen og kjører python example01.py

Deretter går vi til wxFormbuilder og begynner å designe skjermen. Komponentene distribueres på skjermen ved hjelp av Layout og rutenett, i dette tilfellet vil vi velge en vertikal wxBoxSizer, det den gjør er å dele skjermen i tre rader, hvor vi vil legge til komponentene.

Deretter legger vi til en meny, for dette går vi til kategorien Meny / verktøylinje, først legger vi til menylinjen som vil være hovedmenyen. Deretter vil vi hierarkisk legge til en åpen menutitem, en separator og en annen menuitem med navnet Exit.

Vi kan se at objektene er ordnet etter et hierarki der det høyeste omfatter det laveste, vi kan bytte posisjon med bare å dra. Deretter går vi til fanen Data og vi vil legge til en wxGrid -kontroll For å vise et datarutenett, for dem plasserer vi oss i oppsettet slik at neste kontroll vil være plassert under menyen.

Vi genererer den nye koden, og filen vil bli endret noname.py, kan vi gi det nytt navn til example02.py, og legge til endringene som er gjort. Deretter løper vi fra et terminalvindu ved hjelp av kommandoen:

 python eksempel02.py

Nå skal vi wxFormbuilder og vi vil legge til en skillelinje under rutenettet, fra Felles fane og velg komponenten wxStaticLine.

Deretter vil vi lage felt for å gjøre en detaljmester, for dette vil vi plassere oss i oppsettet og legge til en komponent.

I tillegg til å designe grafiske grensesnitt kan vi legge til hendelser, for eksempel klikker vi på opptaksknappen og går til kategorien Hendelser, vi ser etter typen hendelse, i dette tilfellet OnLeftDown, klikk på venstre museknapp.

I denne hendelsen skriver vi navnet på funksjonen som vil påkalle hendelsen. Når koden genereres, vil den bare opprette funksjonen for oss, så må vi skrive koden med funksjonaliteten. Når vi har generert filen, legger vi til følgende komplette kode på slutten:

 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.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 Standardinnstillinger 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.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. Legg til (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. Legg til (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 "Åpne", 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) # klikk hendelse som påkaller funksjonsoppføring self.m_button4.Bind (wx.EVT_LEFT_DOWN, self.Record) def __del __ (self): pass # opprett en egendefinert melding eller dialogboks def Message (self, msg, title, style): dlg = wx.MessageDialog ( parent = None, melding = msg, caption = title, style = style) dlg.ShowModal () dlg.Destroy () # Record -funksjon som reagerer på hendelsen click def Record (self, event): self.Message ("This is en klikk! hendelse "," Informasjon - opplæring ", wx.OK | wx.ICON_INFORMATION) app = wx.App (False) frame = MyForm (None) frame.Show (True) app.MainLoop () 

Deretter skal vi teste det samme programmet i en Windows 7 -installasjon med Python og wxpython tidligere installert, og resultatet er følgende:

Når vi er ferdige med hele utviklingen, kan applikasjonen distribueres ved hjelp av programvare som InnoSetup som vi hadde sett i opplæringsprogrammene:

  • Lag installatører med Inno Setup
  • Tilpasset installatør for å distribuere programvaren vår.

wxFormBuilder er et visuelt miljø som lar oss generere Python -kode med wxPython -plattformen, et annet alternativ for å utvikle grafiske grensesnitt for Python vil være opp til brukeren om han skal bruke PyQt eller wxPython.

En av de store fordelene med wxFormBuilder er at den inneholder mange komponenter og widgets, som kan tilpasses enda mer enn i andre mer populære miljøer. Vi kan se resultatene mens vi lager applikasjonene, så vi kan ha forskjellige versjoner av det grafiske grensesnittet og koden som vi legger til. I motsetning til Qt Designer, lar wxFormBuilder generere hendelser og deretter påkalle en viss funksjonalitet.
.

Likte og hjalp du denne opplæringen?Du kan belønne forfatteren ved å trykke på denne knappen for å gi ham et positivt poeng

Du vil bidra til utvikling av området, dele siden med vennene dine

wave wave wave wave wave