W sumie nigdy nie czułem potrzeby szukania jakichkolwiek informacji związanych z programowaniem po polskiemu (co tu dużo pisać, bida
i dobrze sobie dawałem radę z oryginalnymi wersjami dokumentacji, ale nadchodzi czasami taki moment w życiu że ma się ochotę czymś podzielić. Dlaczego akurat wxPython? Odpowiedź jest prosta - nowoczesny, intensywnie rozwijany, wspierany przez ogromną społeczność, przenośny i dobrze opracowany zestaw widgetów (komponentów) przy pomocy których możemy napisać aplikację okienkową wykorzystującą natywne dla danej platformy mechanizmy, dzięki czemu interfejs graficzny wygląda tak jak jakikolwiek inny program napisany pod daną platformę i wykorzystuję możliwości themowania wyglądu graficznego, czyli po prostu różnorodnych skórek (lub jak kto lubi motywy graficzne znane spod windowsa). Domyślnie dołączanym do Pythona pakietem pozwalającym na pisanie aplikacji okienkowych jest Tkinter (będący interfejsem do TCL’owego Tk), będący przez niektórych określany mianem łatwiejszego, ale jak to się w życiu często okazuje za wszystko wkońcu przyjdzie zapłacić cenę. Jaka jest ona w jego przypadku? początki z nim sa całkiem miłe, ale wraz z rozwijaniem naszej aplikacji pojawiają się schody: dziwna składnia konstruktorów widgetów (wynikająca ze składni TCL’a - języka z którego się wywodzi), brak czasami podstawowych komponentów graficznych (combobox’y itp.), oraz ochydny wygląd będący skutkiem własnych mechanizmów rysowania okien nie opartych na rozwiązaniach natywnych dla każdej z platform (Windows/Linux/Unix…). Ostatni z problemów ma szansę na chociaż częściowe naprawienie w związku z inicjatywą projektu Tile. Coraz bardziej zaczyna się też dawać we znaki archaiczność tego pakietu, działająca na korzyść nowocześniejszych rozwiązań typu wxPython czy PyQT. W związku z coraz większym zainteresowaniem Pythonem oraz brakiem porządnych tutoriali w naszej mowie postanowiłem dołożyć swoje pięć groszy.
1. Instalacja i konfiguracja
Windows: ściągamy instalator binarek z oficjalnej witryny.Wybieramy swoją wersję pythona i ściągamy odpowiedni pakiet (wersję unikod lub ansi - jeśli nie wiesz w czym rzecz to ściągnij pierwszą). Następnie ściągamy pakiet “docs & demos” zawierający dokumentację i demo z przykładowymi aplikacjami z kodem źródłowym, sowicie skomentowane, niestety po angielsku, więc potrzebna będzie choćby podstawowa jego znajomość i odrobinę sprytu.
Linux: w zależność od posiadanej dystrybucji mamy parę wyjść: sciągnięcie binarek w postaci pakietów dla naszego distro (rpm, deb itp) bądź kod źródłowy jeśli lubimy odrobinę zabawy. Zagadnienia dotyczące instalacji pakietów można znaleźć na stronach danej dystrybucji Linuxa i tysiącach forum internetowych, nie będę się więc na ten temat rozpisywać. Jeśli ktoś chce się pobawić w kompilowanie od podstaw a nie wie jak się zabrać, niech da znać.
Po zakończeniu instalacji tych pakietów mamy nowe wpisy w systemowym menu zawierające demo, przykładowe aplikacje (w tym rewelacyjnego shella PyCrust), dokumentację oraz XRCed’a czyli narzędzie do wizualnego budowania interfejsu użytkownika generujące pliki XML opisujące jego budowę.
2. wxPython a “okienka” czyli podstawy budowy interfejsu użytkownika
Każdy mający do czynienia z komputerami potrafi rozróżnić podstawowe komponenty budowy okien programu. Różnice pomiędzy oknami na poszczególnych platformach są całe szczęście niewielki, dzięki stosowaniu się developerów do standardów ich budowy, co zaoszczędza sporo nerwów użytkownikom i ułatwia przesiadkę pomiędzy systemami. W skład podstawowych komponentów budujących okno programu wchodzą:
- główna okno programu: zawierające kontrolki do obsługi okna (zamknij, zmiana rozmiaru itp)
- menu programu: zawiera menu udostępniające różne funkcje programu
- pasek statusu (status bar): wyświetlający różne informacje dotyczące programu
- menu kontekstowe: udostępnia skróty do funkcji programu
- pasek narzędzi: skróty do funkcji programu pod postacią przycisków z ikonami
- inne komponenty edycyjne i umożliwiające organizowanie widoków (np. zakładki/tab’y)
Wszystkie elementy graficznego elementu użytkownika są dziedziczone z klasy wxWindow będącą jedną z podstawowych składników wxPythona. Klasą reprezentującą okna jest wxFrame, tak więc warto zacząć myśleć w kategoriach ramek, a nie okien. Na początek utworzymy puste okno aplikacji bez żadnych kontrolek:
import wxapp=wx.PySimpleApp()
ramka=wx.Frame(None,-1,"Ha ha!")
ramka.Show(True)
app.MainLoop()
Rezultatem będzie następujące okno

Podstawową klasą odpowiadającą za start całego mechanizmu wxPython jest klasa wx.App lub jej subklasa wx.PySimpleApp będąca uproszczeniem w stosunku do klasy bazowej, dzięki której nie musimy się martwić o inicjalizację wx.App’a i ustawianie głównej ramki aplikacji. W przypadku wykorzystania klasy wx.App kod wyglądał by następująco:
import wx
class App(wx.App):
def OnInit(self):
ramka = wx.Frame(parent=None, title='Haha!')
frame.Show()
return True
app = App()
app.MainLoop()
Categories:


