W porządku, moi drodzy. Doszliśmy do ostatniego "rodzaju" tematu z cyklu artykułów o Pythonie (jak na razie). Jest nim tworzenie GUI (ang. "Graphical User Interface"), graficznego interfejsu użytkownika. Programowanie GUI jest również obowiązkiem w tworzeniu oprogramowań, w których nie wystarczy wiersz poleceń. Pokażę Wam w niniejszym artykule co pakiet "EasyGUI" oferuje w kwestii tworzenia takiego interfejsu.

PAKIET "EASYGUI" WYMAGA INSTALACJI

Niniejszy pakiet nie jest częścią standardowej biblioteki Pythona więc trzeba ponownie uruchomić sobie z wiersza poleceń "pip", system zarządzania pakietami Pythona publikowanymi przez społeczność. Aby uniknąć ewentualnych przeszkód, sugeruję uruchamianie z uprawnieniami administratora. Posługując się tym oto poleceniem:

pip install easygui

bez problemu powinniście zainstalować sobie pakiet "EasyGUI" z racji tego, że nie wymaga on żadnych innych dodatków do ściągnięcia z Internetu. Komunikat da Wam wyraźnie znać czy jest OK, czy nie jest OK.

Instalacja pakietu "EasyGUI" w systemie "pip" w Pythonie

Komunikat o poprawności instalacji pakietu "EasyGUI" w systemie "pip".

CEL PROGRAMOWANIA GRAFICZNEGO INTERFEJSU UŻYTKOWNIKA

Najpierw trzeba sobie pokrótce wyjaśnić sens całego procesu graficznego podejścia. Programowanie GUI generalnie stosuje się powszechnie z dwóch powodów:

  1. ułatwienie (w niektórych przypadkach nawet umożliwienie) użytkownikowi korzystania z funkcjonalności wytworzonej aplikacji poprzez "zakrywanie" trudnych do zrozumienia komend ładnymi przyciskami, polami tekstowymi i innymi komponentami (ja to nazywam "ubieraniem w ładne słówka" np. zdecydowanie będzie lepiej wyglądać "Utwórz nowy katalog" zamiast "mkdir")
  2. znaczne przyspieszenie wykonywania czynności, które "mamy w głowie" i nie trzeba wprowadzać żadnych wielu poleceń w mniej abstrakcyjnych słowach - innymi słowy, graficzna reprezentacja ma szansę zautomatyzować ten ciąg poleceń i połączyć mnóstwo komend w jedno kliknięcie

Brzmi opłacalnie? Pewnie! Wasz program z pewnością będzie się lepiej prezentował jak człowieka przywita okno z układami przycisków, a nie jak trzeba odpalać sławnego "cmd", aby dostać się do pliku wykonywalnego i samemu podawać polecenia. O ile dla kogoś, kto ma pojęcie w informatyce, to jeszcze pół biedy, to osoba o innej zawodowej profesji już w ogóle sobie nie poradzi. Pieprznie tą aplikacją albo poprosi kogoś z zewnątrz. W każdym razie będzie frustracja i niezadowolony użytkownik. Chyba chcecie tego uniknąć.

Tak w telegraficznym skrócie można wyjaśnić po co w ogóle się tworzy graficzny interfejs użytkownika.

PAKIET "EASYGUI" DZIAŁA ZUPEŁNIE INACZEJ

Pakiet "EasyGUI" nie idzie w tę samą stronę programowania GUI co zdecydowana większość przeznaczonych do tego bibliotek czy dodatków. Podejście jakie znamy polega na utworzeniu komponentów, znalezieniu dla nich miejsca w oknie, zaprogramowaniu zachowania poprzez tzw. "listenery" czy "callbacki" (funkcje wywołujące się w wyniku określonego zdarzenia np. kliknięcia przycisku lub wprowadzenia znaku do pola tekstowego) i zdefiniowaniu połączeń między innymi oknami.

"EasyGUI" kieruje się innym podejściem. Kodowanie polega na wyświetlaniu pojedynczych okienek wyświetlanych na bazie komunikatu. Czyli mamy okienko składające się z tytułu, treści i przycisków na samym dole typu "Tak", "Nie", "Ignoruj" itd. Moim zdaniem, jest to dobre podejście dla początkujących. Programista nie koncentruje się bowiem na pozycjonowaniu wielu elementów i uwzględnianiu mnóstwa ścieżek, tylko działanie odbywa się w sposób liniowy (od okna A, do okna Z).

Te okienka tylko wyglądają na komunikaty, bo możemy wprowadzić własną gamę przycisków taką jaką chcemy. Wyżej wymieniony daje pełną swobodę w dodawaniu przycisków do okienek i określania ich tekstowych oznaczeń. Wszystko zależy od metod jakie wywołamy. Pokażę Wam kilka przykładowych.

PROGRAMOWANIE OKIENEK

Przypominam o imporcie modułu w sposób na przykład taki:

import easygui

Po zawarciu takiej instrukcji, można teraz przejść do samych metod. "EasyGUI" oferuje parę wyświetlających podczas działania okienek, a każde z nich ma swoje odrębne zastosowanie. Jak zwykle zaczniemy od tego najprostszego.

msgbox

"msgbox", czyli "message box". To jest okienko z treścią i przyciskiem "OK". Bez wątpienia można je określić "komunikatem", gdyż użytkownik nie ma zbyt dużego wyboru. Posiada tylko przycisk "OK". Wystarczy tylko jeden parametr - łańcuch znaków jako treść komunikatu nad przyciskami i to wszystko!

easygui.msgbox([łańcuch znaków jako treść komunikatu], [łańcuch znaków jako tytuł okna])

Możecie jeszcze chcieć sobie dodać nagłówek do Waszego okna. To dodajecie drugi łańcuch znaków, zaraz po tym pierwszym.

Działanie metody "msgbox" w pakiecie "EasyGUI" w Pythonie

Metoda "msgbox" wyświetla okienko w formie komunikatu posiadające tylko przycisk "OK". Można edytować treść i tytuł komunikatu przy pomocy parametrów.

ccbox

Oto kolejny wariant prostego okna jakie oferuje pakiet "EasyGUI". Treść komunikatu i dwa przyciski "Continue" i "Cancel" (stąd te literki "c" w nazwie). Co jest jeszcze istotniejsze, metoda zwraca wartość logiczną i to pozwala na nieco szersze manewry, bo wybraną decyzję możemy później podstawić do instrukcji warunkowej lub do innego wyrażenia.

selected_first_option = easygui.ccbox([łańcuch znaków jako treść komunikatu], [łańcuch znaków jako tytuł okna])

Oczywiście na poprawę humoru, możecie zmieniać teksty przycisków podając nazwany parametr "choices" i listę z DWOMA łańcuchami znaków po znaku przypisania. Gdy dacie więcej lub mniej, przywitacie się ze zgłoszeniem wyjątku!

Działanie metody "ccbox" w pakiecie "EasyGUI" w Pythonie

Metoda "ccbox" wyświetla okno posiadające DWA przyciski zamiast jednego i zwraca wartość boolowską ("True" lub "False") w zależności od wybranej opcji.

W taki sam sposób działają też metody "ynbox" i "boolbox". Jedyną różnicą są teksty przycisków w postaci "Yes" i "No" czy "True" i "False" (dla "boolbox"). Ot, tyle z różnic!

buttonbox

"buttonbox", czyli okno z możliwością wstawienia sobie tylu przycisków ile chcemy. Tutaj również odbywa się zwrot wartości, ale tym razem tekstowej. Jaki klikniecie przycisk, taki jego tekst przyjmie zmienna podpięta pod tę metodę.

button_text = easygui.buttonbox([łańcuch znaków jako treść komunikatu], [łańcuch znaków jako tytuł okna], [lista łańcuchów znaków jako teksty przycisków])

Gdy chcemy zmodyfikować sobie przyciski, wprowadzamy własną listę łańcuchów znaków i tyle ile ona posiada argumentów, tyle przycisków ujrzycie w swoim nowym oknie.

Działanie metody "buttonbox" w pakiecie "EasyGUI" w Pythonie

Metoda "buttonbox" pozwala na wstawienie dowolnej liczby przycisków w okno i zwraca łańcuch znaków jako tekst wybranego przycisku.

indexbox

Metoda "indexbox" jest kolejną jaką udostępnia nam pakiet "EasyGUI". Gdy nie jest nam potrzebna informacja o tekście zaznaczonego przycisku tylko jego numer w kolejności (zwany "indeksem"), sięgamy wówczas do "indexbox" które swoim zachowaniem nie różni się niczym innym od poprzednika poza zwracaną wartością, bo teraz to będzie liczba całkowita.

enterbox

Ostatnią przykładową metodą jaką zademonstruję jest "enterbox". Jest to zupełnie inna odmiana okna, bo składająca się z pola tekstowego do którego wprowadzamy jednowierszowy tekst i taki też zostanie później zwrócony po zatwierdzeniu przyciskiem "OK" lub "None", jeśli wciśnięto "Cancel".

typed_text = easygui.enterbox([łańcuch znaków jako treść komunikatu], [łańcuch znaków jako tytuł okna], [lista łańcuchów znaków jako teksty przycisków], [łańcuch znaków jako domyślny tekst osadzony w polu tekstowym])
Działanie metody "enterbox"

"enterbox" to możliwość wprowadzenia własnej wartości do pola tekstowego i zwrócenie jej poprzez kliknięcie opcji "OK".

Przypominam Wam lojalnie, że samodzielnie dbamy o weryfikację pożądanego typu danych i ewentualną "pustkę" wartości ("None").

A JA WIDZIAŁEM SŁOWO "MODUŁ"!

Na samą końcówkę, jedno zdanie wyjaśnienia. Możecie zobaczyć, że pakiet "EasyGUI" jest powszechnie nazywany "modułem". Ja go nazywam "pakietem", a to dlatego, że na podstawie tłumaczonych definicji, znajduje się tam "__init__", plik skryptowy inicjujący działania pakietu. Zatem, to musi być pakiet w rozumieniu zasad Pythona. Naturalnie nie będę mieć nikomu za złe jeśli będzie się trzymał określenia "moduł". Nie należę do tych, co złośliwie czepiają się słówek.


Tak wygląda cały artykuł o tworzeniu GUI w najprostszej postaci. Jest wiele innych narzędzi w Pythonie dzięki którym stworzycie dobrej jakości interfejs użytkownika. Pakiet "EasyGUI" stawia na jak najprostsze programowanie, bez uwzględniania wielu ścieżek i połączeń między przyciskami. Zostawię Wam link do dokumentacji "EasyGUI" jeśli ktoś chce się wgłębić w temat.

PODOBNE ARTYKUŁY