Anwendungen entwickeln mit Python und wxFormBuilder

Inhaltsverzeichnis

Die Programmiersprache Python ermöglicht die Übernahme verschiedener Bibliotheken und Frameworks, um grafische Oberflächen zu entwickeln. Einige sind Tinker, Wxwidget und QT, eine Plattform, auf der wir die Tutorials gesehen haben:

  • Plattformübergreifende Anwendungen mit Python, PyQT und QT Desginer 5
  • Anwendungen mit Sqlite Database, PyQT und QT Desginer.

In diesem Tutorial werden wir sehen wie man grafische Oberflächen mit WxWidget und dem wxFormBuilder Designtool entwickelt. wxFormBuilder ist eine Anwendung für das Design von grafischen Benutzeroberflächen, sie ist kostenlos und Open Source ermöglicht die Verwendung der wxWidgets-Bibliotheken, sie wird häufig für die Entwicklung von Multiplattform-Anwendungen verwendet.

wxFormBuilder ist ein visuelles Entwicklungstool mit dem großen Vorteil, dass es bereits während der Entwicklung Code in C++, Python, PHP, Lua und XRC generieren kann. Es funktioniert unter Windows, Linux und Mac OS.

Für dieses Tutorial werden wir eine Installation in Linux und in einer virtuellen Maschine mit VirtualBox und Windows 7 durchführen, um zu beweisen, dass wir die Multiplattform-Anwendung entwickeln können, genauso wie wir es unter Linux installieren und eine virtuelle Maschine mit Linux haben könnten.

Wir müssen die folgenden Tools installieren:

PythonEs ist eine High-Level-Programmiersprache, das Hauptziel von Python besteht darin, die Lesbarkeit des Codes zu erleichtern und es Programmierern zu ermöglichen, Anwendungen in weniger Codezeilen im Vergleich zu Programmiersprachen wie C++, C# oder Java zu entwickeln.

Einer der Vorteile von Python besteht darin, dass es mehrere Programmierparadigmen unterstützt, wie zum Beispiel objektorientierte, zwingende und funktionale oder prozedurale Programmierung. Wir können Python von der offiziellen Website herunterladen.

wxPythonEs ist plattformübergreifend und kann ohne Änderungen auf Windows, Linux und Mac OS ausgeführt werden. Das Ergebnis des Schnittstellendesigns ist ein natives Erscheinungsbild der Anwendung, abhängig vom Betriebssystem, auf dem sie ausgeführt wird.

Es handelt sich um eine Reihe von Bibliotheken, die es ermöglichen, die wxWidgets-Grafikbibliothek zu portieren und mit der Programmiersprache Python zu verwenden. Die wxWidgets-Bibliothek zeichnet sich dadurch aus, dass sie plattformübergreifend ist.

Es kann von der offiziellen WxPython-Website heruntergeladen werden, unter Linux kommt es in den Repositorys oder kann hinzugefügt werden

wxFormBuilderEs ist eine kostenlose, plattformübergreifende und Open-Source-IDE. Es wird verwendet, um grafische Oberflächen GUI wxWidgets oder in diesem Fall wxPython zu entwerfen, es ermöglicht die Erstellung von plattformübergreifenden Anwendungen. Wie Qt Designer wird das Tool wxFormBuilder für die visuelle Entwicklung verwendet.

wxFormbuilder ermöglicht die Generierung von Code in C++, Python, PHP, Lua und XRC-Code. Der Code wird erstellt, während wir entwerfen.

Wir können es von der offiziellen Website herunterladen. Wir müssen eine Version höher als 3.4 installieren, die alle oben genannten Sprachen unterstützt.

Anwendungsbeispiele mit wxPython und wxFormBuilder
In diesem Tutorial entwickeln wir die Anwendung unter Linux und führen sie dann auch unter Windows aus. Unter Linux ist Python bereits installiert, also installieren wir wxPython und wxFormbuilder, aus einem Terminalfenster schreiben wir den folgenden Befehl:

 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
Dann müssen wir wxpython als Umgebungsvariable hinzufügen, um es aus jedem Verzeichnis verwenden zu können:
 export PYTHONPATH = "$ PYTHONPATH": /usr/lib/python2.7/dist-packages/wx-2.8-gtk2-unicode/
Als nächstes öffnen wir wxFormbuilder aus dem Hauptmenü:

wxFormBuilder präsentiert einen Desktop mit einer linken Spalte, in der sich das Projekt oder der Bildschirm und die von uns verwendeten Komponenten befinden, in der Mitte die Registerkarte Design und eine Registerkarte für jede Sprache, auf der rechten Seite haben wir die Eigenschaften des Projekts und der Komponenten, die wir verwenden.

Das erste, was wir konfigurieren müssen, ist das Projekt. Dazu klicken wir auf den Namen des Projekts und gehen dann zu den Eigenschaften, wo wir einen Namen und die zu verwendende Sprache zuweisen.

Als nächstes gehen wir zur Registerkarte Formular und fügen ein Formular hinzu, das der Container des Bildschirms sein wird.

Dann können wir in den Eigenschaften den Namen des Formulars ändern, dem wir MyForm zuweisen, und den Titel, der sein wird Beispiel01- TutorialDarüber hinaus können wir viele Optionen wie die Hintergrundfarbe, die Größe, den Fenstertyp und vieles mehr ändern.

Wir können zur Registerkarte Python gehen und sehen, wie der Code generiert wird.

Um den Code in einer Datei zu generieren, müssen wir zuerst das Projekt aus dem Menü speichern Datei> Speichern unter, und wir speichern es als example01.fbp

Als nächstes gehen wir zum Menüpunkt Datei> Code generieren, dann gehen wir in das Verzeichnis, in dem wir die Projektdatei speichern und sehen die Datei noname.py

Diese Datei noname.py enthält den mit dem Interface-Design generierten Python-Code, wir können die Datei in example01.py umbenennen

Als nächstes müssen wir den Code hinzufügen, damit dieses Design angezeigt wird, wenn die Anwendung ausgeführt wird. Dazu öffnen wir die Datei und fügen den folgenden Code unten hinzu, der wie folgt bleibt:

 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 __ (self) : Pass # Design-Code für das Ende des Formulars ## Code, der die Anwendung anzeigt, wenn app ausgeführt wird = wx.App (False) frame = MyForm (None) frame.Show (True) app.MainLoop ()
Dann gehen wir von einem Terminalfenster in das Anwendungsverzeichnis und führen python example01.py . aus

Als nächstes gehen wir zu wxFormbuilder und beginnen mit der Gestaltung des Bildschirms. Die Komponenten werden über Layout und Raster auf dem Bildschirm verteilt. In diesem Fall wählen wir einen vertikalen wxBoxSizer aus, der den Bildschirm in drei Reihen aufteilt, in denen wir die Komponenten hinzufügen.

Als nächstes fügen wir ein Menü hinzu, dazu gehen wir zur Registerkarte Menü / Symbolleiste, zuerst fügen wir die MenuBar-Komponente hinzu, die das Hauptmenü sein wird. Dann fügen wir hierarchisch ein Open Menuitem, ein Separator und ein weiteres Menuitem mit dem Namen Exit hinzu.

Wir sehen, dass die Objekte nach einer Hierarchie angeordnet sind, wobei das höchste das niedrigste umfasst, wir können ihre Position durch einfaches Ziehen austauschen. Dann gehen wir auf die Registerkarte Daten und wir werden a hinzufügen wxGrid-Steuerelement Um ein Datenraster anzuzeigen, platzieren wir uns für sie im Layout, sodass sich das nächste Steuerelement unterhalb des Menüs befindet.

Wir generieren den neuen Code und die Datei wird modifiziert noname.py, können wir es in example02.py umbenennen und die vorgenommenen Änderungen hinzufügen. Dann führen wir von einem Terminalfenster aus mit dem Befehl:

 Python-Beispiel02.py

Jetzt gehen wir wxFormbuilder und wir fügen eine Trennleiste unter dem Raster hinzu, von der Registerkarte „Allgemein“ und wählen Sie die Komponente aus wxStaticLine.

Als nächstes erstellen wir Felder, um einen Detailmaster zu erstellen, dafür platzieren wir uns im Layout und fügen eine Komponente hinzu.

Neben dem Entwerfen von grafischen Oberflächen können wir Ereignisse hinzufügen, zum Beispiel klicken wir auf die Aufnahmeschaltfläche und gehen zur Registerkarte Ereignisse. In diesem Fall suchen wir nach der Art des Ereignisses OnLeftDown, klicken Sie mit gedrückter linker Maustaste.

In diesem Fall schreiben wir den Namen der Funktion, die das Ereignis aufruft, beim Generieren des Codes wird nur die Funktion für uns erstellt, dann müssen wir den Code mit der Funktionalität schreiben. Wenn wir die Datei generiert haben, fügen wir den folgenden vollständigen Code am Ende hinzu:

 wx importieren wx.xrc importieren wx.grid importieren ######################################## ##################################### Klasse 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)BoxTICSAL (selfSizerVER1 = wx)BoxTICSAL (self.SetSizeHintsSz) 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) # Spalten self.m_grid1.EnableDragColMove (False) self.m_grid1.EnableDragColSize (True) self.m_grid1.SetColLabel. SetColLabel.mSize ( .SetColLabelAlignment (wx.ALIGN_CENTRE, wx.ALIGN_CENTRE) # Zeilen 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.mFT_grid1.SetLIGN . Assistent w/wFT .SetLignment_OPELL, w / w Defaults w / wm_grid1.SetLIGNDefaultCell_FT ) bSizer1.Add (self.m_grid1, 0, wx.ALL, 5) self.m_staticline4 = wx.StaticLine (self, wx.ID_ANY, wx.DefaultPositionize, wx.DefaultS , 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.SetNonFlexibleG (wx.FLEX_GROWMODE1_SPECIFIED) selfText.SelfText.(self, wx.ID_ANY, u "Product", 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, wx. ALLE | 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.ALLPAND | wx.ALIGN_BOTTOM, 5) self.m_staticText3 = wx.StaticText (self, wx.ID_ANY, u "Kategorie", wx.DefaultPosition, wx.DefaultSize, 0) self.m_staticText3.Wrap (-1) fgSizer1. Add (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.DefaultSize, m_comboBox1 ) .Add (self.m_comboBox1, 0, wx.ALL, 5) self.m_staticText4 = wx.StaticText (self, wx.ID_ANY, u "Eintragsdatum", 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. Wx. 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. Add (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 "Löschen", 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 "Öffnen", 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.EmptyString , Leeres .ITEM_NORMAL) self.m_menu1.AppendItem (self.m_menuItem3) self.m_menubar1.Append (self.m_menu1 oder "Files") self.SetMenuBar (self.m_menubar1) self.Centre (wx.BOTH) # Klick auf Ereignis, das die function record self.m_button4.Bind (wx.EVT_LEFT_DOWN, self.Record) def __del __ (self): pass # eine benutzerdefinierte Nachricht oder ein Dialogfeld erstellen def Nachricht (self, msg, title, style): dlg = wx.MessageDialog ( parent = None, message = msg, caption = title, style = style) dlg.ShowModal () dlg.Destroy () # Aufnahmefunktion, die auf das Ereignis reagiert click def Aufnahme (self, event): self.Message ("Das ist a click! event "," Information - Tutorial ", wx.OK | wx.ICON_INFORMATION) app = wx.App (False) frame = MyForm (Keine) frame.Show (True) app.MainLoop () 

Als nächstes testen wir dieselbe Anwendung in einer Windows 7-Installation mit zuvor installiertem Python und wxpython und das Ergebnis ist das folgende:

Wenn wir unsere vollständige Entwicklung abgeschlossen haben, kann die Anwendung mit Software wie InnoSetup verteilt werden, wie wir es in den Tutorials gesehen haben:

  • Installer mit Inno Setup erstellen
  • Benutzerdefiniertes Installationsprogramm zum Verteilen unserer Software.

wxFormBuilder ist eine visuelle Umgebung, die es uns ermöglicht, Python-Code mit der wxPython-Plattform zu generieren, eine weitere Alternative zur Entwicklung grafischer Schnittstellen für Python wird dem Benutzer überlassen, ob er PyQt oder wxPython verwendet.

Einer der großen Vorteile von wxFormBuilder besteht darin, dass er viele Komponenten und Widgets enthält, die noch stärker anpassbar sind als in anderen populäreren Umgebungen. Wir können die Ergebnisse beim Erstellen der Anwendungen sehen, sodass wir verschiedene Versionen der grafischen Benutzeroberfläche und des Codes haben, den wir hinzufügen. Im Gegensatz zu Qt Designer ermöglicht wxFormBuilder das Generieren von Ereignissen und das anschließende Aufrufen einer bestimmten Funktionalität.
.

Hat dir dieses Tutorial gefallen und geholfen?Sie können den Autor belohnen, indem Sie diesen Knopf drücken, um ihm einen positiven Punkt zu geben

Sie werden die Entwicklung der Website helfen, die Seite mit Ihren Freunden teilen

wave wave wave wave wave