Tworzenie aplikacji w Pythonie i wxFormBuilder

Spisie treści

Język programowania Python pozwala na przyjęcie różnych bibliotek i frameworków do tworzenia interfejsów graficznych. Niektóre z nich to Tinker, Wxwidget i QT, platforma, na której widzieliśmy tutoriale:

  • Aplikacje wieloplatformowe z Python, PyQT i QT Desginer 5
  • Aplikacje z bazą danych Sqlite, PyQT i QT Desginer.

W tym samouczku zobaczymy jak tworzyć interfejsy graficzne za pomocą WxWidget i narzędzia projektowego wxFormBuilder. wxFormBuilder to aplikacja do projektowania graficznych interfejsów użytkownika, jest bezpłatna, a open source pozwala na korzystanie z bibliotek wxWidgets, jest szeroko stosowana do tworzenia aplikacji wieloplatformowych.

wxFormBuilder to wizualne narzędzie programistyczne, którego wielką zaletą jest to, że podczas projektowania potrafi generować kod w językach C++, Python, PHP, Lua i XRC. Działa na systemach Windows, Linux i Mac OS.

W tym samouczku wykonamy instalację w Linuksie i na maszynie wirtualnej z VirtualBox i Windows 7, aby udowodnić, że możemy rozwijać aplikację wieloplatformową, w ten sam sposób, w jaki moglibyśmy zainstalować w Linuksie i mieć wirtualną maszynę z Linuksem.

Będziemy musieli zainstalować następujące narzędzia:

PytonJest to język programowania wysokiego poziomu, głównym celem pythona jest ułatwienie czytelności kodu i umożliwia programistom tworzenie aplikacji w mniejszej liczbie linijek kodu w porównaniu do języków programowania takich jak C++, C# czy Java.

Jedną z zalet Pythona jest to, że obsługuje wiele paradygmatów programowania, takich jak programowanie obiektowe, imperatywne i funkcjonalne lub proceduralne. Python możemy pobrać z oficjalnej strony internetowej.

wxPythonJest wieloplatformowy, może działać w systemach Windows, Linux i Mac OS bez modyfikacji. Wynikiem projektu interfejsu jest natywny wygląd aplikacji w zależności od systemu operacyjnego, na którym działa.

Jest to zestaw bibliotek, które umożliwiają przenoszenie i używanie biblioteki graficznej wxWidgets przy użyciu języka programowania Python. Biblioteka wxWidgets charakteryzuje się wieloplatformowością.

Można go pobrać z oficjalnej strony WxPython, w systemie Linux jest dostępny w repozytoriach lub można go dodać

wxFormBuilderJest to darmowe, wieloplatformowe środowisko IDE o otwartym kodzie źródłowym. Służy do projektowania interfejsów graficznych GUI wxWidgets lub w tym przypadku wxPython, umożliwia tworzenie aplikacji wieloplatformowych. Podobnie jak Qt Designer, narzędzie wxFormBuilder służy do projektowania wizualnego.

wxFormbuilder pozwala na generowanie kodu w C++, Pythonie, PHP, Lua i XRC. Kod powstaje w trakcie projektowania.

Możemy go pobrać z jego oficjalnej strony internetowej, musimy zainstalować wersję wyższą niż 3.4, czyli taką, która obsługuje wszystkie wymienione powyżej języki.

Przykłady zastosowań z wxPython i wxFormBuilder
W tym samouczku opracujemy aplikację pod Linuksem, a następnie uruchomimy ją również pod Windowsem. W Linuksie python jest już zainstalowany więc zainstalujemy wxPython i wxFormbuilder, z okna terminala piszemy następującą komendę:

 sudo add-apt-repository -y ppa: wxformbuilder / wxwidgets sudo apt-get aktualizacja sudo apt-get zainstaluj libwxgtk3.0-0 libwxgtk-media3.0-0 sudo add-apt-repository -y ppa: wxformbuilder / release sudo apt - pobierz aktualizację sudo apt-get zainstaluj wxformbuilder
Następnie musimy dodać wxpython jako zmienną środowiskową, aby móc z niej korzystać z dowolnego katalogu:
 export PYTHONPATH = "$ PYTHONPATH": / usr / lib / python2.7 / dist-packages / wx-2.8-gtk2-unicode /
Następnie otwieramy wxFormbuilder z menu głównego:

wxFormBuilder prezentuje pulpit z lewą kolumną gdzie będzie się znajdował projekt lub ekran i komponenty, których używamy, pośrodku zakładka design i zakładka dla każdego języka, po prawej będziemy mieli właściwości zarówno projektu jak i komponenty, których używamy.

Pierwszą rzeczą, którą będziemy musieli skonfigurować będzie projekt, w tym celu klikamy w nazwę projektu a następnie przechodzimy do właściwości, gdzie przypiszemy nazwę i język, którego będziemy używać.

Następnie przechodzimy do zakładki Formularz i dodajemy formularz, który będzie kontenerem ekranu.

Następnie z właściwości możemy zmodyfikować nazwę formularza, do którego przypisujemy MyForm oraz tytuł, który będzie Przykład01- SamouczekDodatkowo możemy modyfikować wiele opcji takich jak kolor tła, rozmiar, rodzaj okna i wiele innych.

Możemy przejść do zakładki Python i zobaczyć jak generowany jest kod.

Aby wygenerować kod w pliku musimy najpierw zapisać projekt z menu Plik> Zapisz jakoi zapisujemy go jako example01.fbp

Następnie przechodzimy do opcji menu Plik> Generuj kod, następnie przechodzimy do katalogu, w którym zapisujemy plik projektu i zobaczymy plik noname.py

Ten plik noname.py zawiera kod Pythona wygenerowany z projektem interfejsu, możemy zmienić nazwę pliku na example01.py

Następnie musimy dodać kod, aby ten projekt wyświetlał się podczas wykonywania aplikacji, w tym celu otwieramy plik i dodajemy poniższy kod, pozostając w następujący sposób:

 import wx import wx.xrc class MyForm (wx.Frame): def __init __ (self, parent): wx.Frame .__ init__ (self, parent, id = wx.ID_ANY, title = u "Przykład01 - Samouczek", poz = 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 # End of Form design code ## Kod, który pokazuje aplikację podczas wykonywania app = wx.App (False) frame = MyForm (Brak) frame.Show (True) app.MainLoop ()
Następnie z okna terminala przechodzimy do katalogu aplikacji i wykonujemy python example01.py

Następnie przechodzimy do wxFormbuilder i zaczynamy projektować ekran. Komponenty są rozmieszczane na ekranie za pomocą Layout i siatek, w tym przypadku wybierzemy pionowy wxBoxSizer, który podzieli ekran na trzy rzędy, w których dodamy komponenty.

Następnie dodamy menu, w tym celu przechodzimy do zakładki Menu / Toolbar, najpierw dodamy komponent MenuBar, który będzie głównym menu. Następnie dodamy hierarchicznie element Open Menutem, separator i kolejny element menu o nazwie Exit.

Widzimy, że obiekty są ułożone według hierarchii, w której najwyższy obejmuje najniższy, możemy zamienić ich pozycję samym przeciągnięciem. Następnie przejdziemy do zakładki Dane i dodamy Kontrola wxGrid Aby pokazać siatkę danych, umieszczamy się dla nich w Layout, aby następna kontrolka znajdowała się pod menu.

Generujemy nowy kod, a plik zostanie zmodyfikowany noname.py, możemy zmienić jego nazwę na example02.py, dodając wprowadzone zmiany. Następnie uruchamiamy z okna terminala poleceniem:

 python przykład02.py

Teraz zamierzamy wxFormbuilder i dodamy pasek separatora pod siatką, od Wspólna karta i wybierz komponent wxStaticLine.

Następnie utworzymy pola, aby stworzyć wzorzec detalu, w tym celu umieścimy się w Layout i dodamy komponent.

Oprócz projektowania interfejsów graficznych możemy dodawać zdarzenia, np. klikamy w przycisk nagrywania i przechodzimy do zakładki Zdarzenia, szukamy typu zdarzenia, w tym przypadku OnLeftDown, kliknij wciśnięty lewy przycisk myszy.

W tym zdarzeniu piszemy nazwę funkcji, która wywoła zdarzenie, podczas generowania kodu utworzy tylko funkcję za nas, wtedy będziemy musieli napisać kod z funkcjonalnością. Po wygenerowaniu pliku dodamy na końcu następujący kompletny kod:

 importuj wx importuj wx.xrc importuj wx.grid ######################################## ##################################### Klasa 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.self. m_grid1 = wx.grid.Grid (self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, 0) # Siatka 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) # Kolumny self.m_grid1.EnableDragColMove (False) self.m_grid1.EnableDragColSize (True) self.m_grid1.SetTrueLabel1 self. SetColLabel.mSize ( .SetColLabelAlignment (wx.ALIGN_CENTRE, wx.ALIGN_CENTRE) # Wiersze self.m_grid1.EnableDragRowSize (True) self.m_grid1.SetRowLabelSize (80) self.m_grid1.SetRowLabelAlignment (wx.ALIGN_CENTRE, wx.ALIGN_CENTRE) # Wygląd etykiety # Domyślne ustawienia komórki self.mGNFT wizard1 wFTLID. .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.DefaultSize, wx.Def. , 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.SetrowN (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, w WSZYSTKO | wx.ROZWIŃ, 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 | 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. 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.DefaultBox, m_combo1 ) .Add (self.m_comboBox1, 0, wx.ALL, 5) self.m_staticText4 = wx.StaticText (self, wx.ID_ANY, u "Data wprowadzenia", 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. Wxx.Wx ROZSZERZ, 5) bSizer1.Add (fgSizer1, 1, wx.ROZSZERZ | wx.ALL, 5) self.m_staticline3 = wx.StaticLine (self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL) bSizer1. Dodaj (self.m_staticline3, 0, wx.ROZSZERZ | wx.ALL, 5) bSizer2 = wx.BoxSizer (wx.HORIZONTAL) bSizer2.AddSpacer ((0, 0), 1, wx.ROZSZERZ, 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 "Otwarte", 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 ,. Pusty .ITEM_NORMAL) self.m_menu1.AppendItem (self.m_menuItem3) self.m_menubar1.Append (self.m_menu1 lub "Pliki") self.SetMenuBar (self.m_menubar1) self.Centre (wx.BOTH) # kliknij zdarzenie wywołujące function record self.m_button4.Bind (wx.EVT_LEFT_DOWN, self.Record) def __del __ (self): pass # utwórz własną wiadomość lub okno dialogowe def Message (self, msg, title, style): dlg = wx.MessageDialog ( parent = Brak, wiadomość = wiadomość, podpis = tytuł, styl = styl) dlg.ShowModal () dlg.Destroy () # Funkcja nagrywania, która odpowiada na zdarzenie kliknij def Nagrywaj (self, event): self.Message ("To jest zdarzenie kliknięcia! ”, „Informacje – samouczek”, wx.OK | wx.ICON_INFORMATION) app = wx.App (False) frame = MyForm (Brak) frame.Show (True) app.MainLoop () 

Następnie przetestujemy tę samą aplikację w instalacji Windows 7 z wcześniej zainstalowanym Pythonem i wxpythonem, a wynik jest następujący:

Kiedy zakończymy nasz pełny rozwój, aplikacja może być dystrybuowana za pomocą oprogramowania takiego jak InnoSetup, jak widzieliśmy w samouczkach:

  • Twórz instalatory za pomocą Inno Setup
  • Niestandardowy instalator do dystrybucji naszego oprogramowania.

wxFormBuilder to wizualne środowisko, które pozwala nam generować kod w Pythonie za pomocą platformy wxPython, inną alternatywą dla tworzenia interfejsów graficznych dla Pythona będzie zależeć od użytkownika, czy użyje PyQt czy wxPython.

Jedną z wielkich zalet wxFormBuilder jest to, że zawiera wiele komponentów i widżetów, które można dostosować nawet bardziej niż w innych, bardziej popularnych środowiskach. Wyniki widzimy podczas tworzenia aplikacji, dzięki czemu możemy mieć różne wersje interfejsu graficznego i kodu, który dodajemy. W przeciwieństwie do Qt Designer, wxFormBuilder umożliwia generowanie zdarzeń, a następnie wywoływanie określonej funkcjonalności.
.

Podobał Ci się i pomógł ten samouczek?Możesz nagrodzić autora, naciskając ten przycisk, aby dać mu pozytywny punkt

Będziesz pomóc w rozwoju serwisu, dzieląc stronę ze swoimi znajomymi

wave wave wave wave wave