Vývoj aplikací pomocí Pythonu a wxFormBuilder

Obsah

Programovací jazyk Python umožňuje přijetí různých knihoven a rámců pro vývoj grafických rozhraní. Některé jsou Tinker, Wxwidget a QT, platforma, na které jsme viděli návody:

  • Cross-platform applications with Python, PyQT and QT Desginer 5
  • Aplikace s databází Sqlite, PyQT a QT Desginer.

V tomto tutoriálu uvidíme jak vyvíjet grafická rozhraní s WxWidget a návrhovým nástrojem wxFormBuilder. wxFormBuilder je aplikace pro návrh grafických uživatelských rozhraní, je bezplatná a open source umožňuje používat knihovny wxWidgets, je široce používána pro vývoj multiplatformních aplikací.

wxFormBuilder je nástroj pro vizuální vývoj. Velkou výhodou je, že při jeho vytváření lze generovat kód v jazycích C ++, Python, PHP, Lua a XRC. Funguje na Windows, Linux a Mac OS.

Pro tento tutoriál provedeme instalaci v Linuxu a ve virtuálním stroji s VirtualBoxem a Windows 7, abychom dokázali, že můžeme vyvíjet multiplatformní aplikaci, stejně jako bychom mohli instalovat v Linuxu a mít virtuální stroj s Linuxem.

Budeme muset nainstalovat následující nástroje:

KrajtaJe to programovací jazyk na vysoké úrovni, hlavním cílem pythonu je usnadnit čitelnost kódu a umožňuje programátorům vyvíjet aplikace v menším počtu řádků kódu ve srovnání s programovacími jazyky, jako je C ++, C # nebo Java.

Jednou z výhod Pythonu je, že podporuje více paradigmat programování, jako je objektově orientované, imperativní a funkční nebo procedurální programování. Můžeme si stáhnout Python z oficiálních webových stránek.

wxPythonJe multiplatformní, může běžet na Windows, Linux a Mac OS bez úprav. Výsledkem návrhu rozhraní je nativní vzhled aplikace v závislosti na operačním systému, který je spuštěn.

Je to sada knihoven, které umožňují portování a použití grafické knihovny wxWidgets pomocí programovacího jazyka Python. Knihovna wxWidgets se vyznačuje tím, že je multiplatformní.

Lze jej stáhnout z oficiálního webu WxPython, v Linuxu se dodává v úložištích nebo jej lze přidat

wxFormBuilderJedná se o bezplatné IDE pro více platforem a s otevřeným zdrojovým kódem. Používá se k návrhu grafických rozhraní GUI wxWidgets nebo v tomto případě wxPython, umožňuje vytváření aplikací napříč platformami. Stejně jako Qt Designer se nástroj wxFormBuilder používá pro vizuální vývoj.

wxFormbuilder umožňuje generovat kód v kódu C ++, Python, PHP, Lua a XRC. Kód se vytváří podle našeho návrhu.

Můžeme si jej stáhnout z jeho oficiálních webových stránek, musíme nainstalovat verzi vyšší než 3,4, která podporuje všechny výše uvedené jazyky.

Příklady aplikací s wxPython a wxFormBuilder
V tomto tutoriálu budeme vyvíjet aplikaci pod Linuxem a poté ji také spustíme na Windows. V Linuxu je již nainstalován python, takže nainstalujeme wxPython a wxFormbuilder, z okna terminálu napíšeme následující příkaz:

 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
Pak musíme přidat wxpython jako proměnnou prostředí, abychom ji mohli použít z libovolného adresáře:
 export PYTHONPATH = "$ PYTHONPATH": / usr / lib / python2.7 / dist-packages / wx-2.8-gtk2-unicode /
Dále otevřete wxFormbuilder z hlavní nabídky:

wxFormBuilder představuje plochu s levým sloupcem, kde bude umístěn projekt nebo obrazovka a komponenty, které používáme, ve středu záložka návrhu a záložka pro každý jazyk, vpravo budeme mít vlastnosti projektu i komponenty, které používáme.

První věc, kterou budeme muset konfigurovat, bude projekt, proto klikneme na název projektu a poté přejdeme na vlastnosti, kde přiřadíme název a jazyk, který budeme používat.

Dále přejdeme na kartu Formulář a přidáme formulář, který bude kontejnerem obrazovky.

Potom z vlastností můžeme upravit název formuláře, kterému přiřadíme MyForm a název, který bude Example01- TutorialKromě toho můžeme upravit mnoho možností, jako je barva pozadí, velikost, typ okna a mnoho dalších.

Můžeme přejít na kartu Python a podívat se, jak se kód generuje.

Abychom vygenerovali kód v souboru, musíme projekt nejprve uložit z nabídky Soubor> Uložit jako, a uložíme jej jako example01.fbp

Dále přejdeme na možnost nabídky Soubor> Generovat kód, poté přejdeme do adresáře, kam uložíme soubor projektu a uvidíme soubor noname.py

Tento soubor noname.py obsahuje kód Pythonu generovaný designem rozhraní, soubor můžeme přejmenovat na example01.py

Dále musíme přidat kód, aby se tento návrh zobrazil při spuštění aplikace. K tomu otevřeme soubor a přidáme následující kód níže, zbývající takto:

 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 __ : 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 ()
Poté z okna terminálu přejdeme do adresáře aplikace a spustíme python example01.py

Dále přejdeme na wxFormbuilder a začneme navrhovat obrazovku. Komponenty jsou na obrazovce distribuovány pomocí Rozložení a mřížek, v tomto případě vybereme svislý wxBoxSizer, to, co udělá, je rozdělit obrazovku na tři řádky, kam komponenty přidáme.

Dále přidáme nabídku, za tímto účelem přejdeme na kartu Nabídka / Panel nástrojů, nejprve přidáme komponentu MenuBar, která bude hlavní nabídkou. Poté hierarchicky přidáme Open Menutitem, oddělovač a další Menuitem s názvem Exit.

Vidíme, že objekty jsou uspořádány podle hierarchie, kde nejvyšší zahrnuje nejnižší, jejich polohu si můžeme vyměnit pouhým přetažením. Poté přejdeme na kartu Data a přidáme a Ovládání wxGrid Abychom zobrazili datovou mřížku, umístíme se pro ně do rozložení, takže další ovládací prvek bude umístěn pod nabídkou.

Vygenerujeme nový kód a soubor bude upraven noname.py, můžeme jej přejmenovat na example02.py a přidat provedené změny. Poté spustíme z okna terminálu pomocí příkazu:

 python example02.py

Nyní se chystáme wxFormbuilder a pod mřížku přidáme oddělovací lištu z Společná tab a vyberte komponentu wxStaticLine.

Dále vytvoříme pole, abychom vytvořili předlohu podrobností, za tímto účelem se umístíme do rozložení a přidáme komponentu.

Kromě navrhování grafických rozhraní můžeme přidávat události, například klikneme na tlačítko záznamu a přejdeme na kartu Události, hledáme typ události, v tomto případě OnLeftDown, klikněte na stisknuté levé tlačítko myši.

V tomto případě napíšeme název funkce, která událost vyvolá, při generování kódu nám funkci pouze vytvoří, poté budeme muset napsat kód s funkčností. Když jsme vygenerovali soubor, přidáme na konec následující kompletní kód:

 import wx import wx.xrc import wx.grid ########################################################### ############################################# Class MyFrame1 ############ ############################################################################ ################ třída 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 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) # Řádky self.m_grid1.EnableDragRowSize (True) self.m_grid1.SetRowLabelSize (80) self.m_grid1.SetRowLabelAlignment (wx.ALIGN_CENTRE, wx.ALIGN_CENTRE) # Vzhled štítku # Výchozí buňka w.m / GrS1WetLIG .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.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 "Product", wx.DefaultPosition, wx.DefaultSize, 0) self.m_staticText1.Wrap (-1) fgSizer1.Add (self.m_staticText 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 "Kategorie", wx.DefaultPosition, wx.DefaultSize, 0) self.m_staticText3.Wrap (-1) fgSizer1. Přidat (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.DefaultPosult, wx.De ) .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 . Zabalit (-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. Přidat (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 "Odstranit", 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 "Otevřít", šx .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.Empty Prázdný .ITEM_NORMAL) self.m_menu1.AppendItem (self.m_menuItem3) self.m_menubar1.Append (self.m_menu1, nebo "Files") self.SetMenuBar (self.m_menubar1) self.Centre (wx.BOTH) # událost kliknutí vyvolávající záznam funkce self.m_button4.Bind (wx.EVT_LEFT_DOWN, self.Record) def __del __ (self): pass # create a custom message or dialog box def Message (self, msg, title, style): dlg = wx.MessageDialog ( rodič = Žádný, zpráva = Zpráva, Titulek = Název, Styl = Styl) dlg.ShowModal () dlg.Destroy () # Funkce záznamu, která reaguje na kliknutí na událost def záznam Record (self, event): self.Message ("This is a click! event "," Information - Tutorial ", wx.OK | wx.ICON_INFORMATION) app = wx.App (False) frame = MyForm (None) frame.Show (True) app.MainLoop () 

Dále budeme testovat stejnou aplikaci v instalaci Windows 7 s dříve nainstalovanými Pythony a wxpython a výsledek je následující:

Když dokončíme náš úplný vývoj, může být aplikace distribuována pomocí softwaru, jako je InnoSetup, jak jsme viděli v tutoriálech:

  • Vytvořte instalační programy pomocí Inno Setup
  • Vlastní instalační program pro distribuci našeho softwaru.

wxFormBuilder je vizuální prostředí, které nám umožňuje generovat kód Pythonu s platformou wxPython, další alternativou k vývoji grafických rozhraní pro Python bude na uživateli, zda použije PyQt nebo wxPython.

Jednou z velkých výhod wxFormBuilder je, že obsahuje mnoho komponent a widgetů, vysoce přizpůsobitelných ještě více než v jiných populárnějších prostředích. Výsledky můžeme vidět při vytváření aplikací, takže můžeme mít různé verze grafického rozhraní a přidaného kódu. Na rozdíl od Qt Designer umožňuje wxFormBuilder generování událostí a následné vyvolání určité funkce.
.

Líbil se vám tento návod a pomohl mu?Autora můžete odměnit stisknutím tohoto tlačítka, čímž mu dáte kladný bod

Vám pomůže rozvoji místa, sdílet stránku s přáteli

wave wave wave wave wave