PySimpleGUI – prostsze tworzenie GUI w Pythonie

PySimpleGUI jest wrapperem ułatwiającym i przyspieszającym tworzenie aplikacji okienkowych w Pythonie. Dostępne są 4 porty, bazujące na następujących bibliotekach: tkinter, Qt, WxPython, Remi (interfejs webowy!).

Zmiana portu np. z PySimpleGUI (bazującego na tkinterze) na PySimpleGUIQt (korzystającego z Qt) nie wymaga dalszych zmian w kodzie programu! Więcej szczegółów można przeczytać >>tutaj<<

Przykładowy program pobierający dane od użytkownika i wyświetlający pobrane dane w drugim oknie:

import PySimpleGUIQt as sg

layout = [[sg.Text('Wprowadź przykładowy tekst')],
          [sg.InputText()],
          [sg.Submit('Zastosuj'), sg.Cancel('Anuluj')]]

window = sg.Window('Okno pobierające dane', layout)

event, values = window.Read()

window.Close()

if event == 'Zastosuj':
    text_input = values[0]
    sg.Popup('Wprowadzony text:', text_input, title='Okno wyświetlające 
        dane')

Pierwsza linia skryptu importuje moduł wrappera (musi być zainstalowany w systemie np. przez pip, jak również framework, który jest wykorzystywany przez dany port – w tym przypadku Qt).

Kolejna linia definiuje wygląd szablonu (layout), który jest listą list. Każda kolejna lista definiuje kolejny wiersz szablonu – w pierwszym wierszu element Text – który tworzy etykietę o treści Wprowadź przykładowy tekst, w drugim pole wprowadzania InputText, a w trzecim wierszu przyciski Zastosuj i Anuluj.

Następnie tworzymy okno i przypisujemy jako drugi argument wcześniej utworzony layout.

Naciśnięcie jakiegokolwiek przycisku lub zamknięcie okna spowoduje przejście do odczytu stanu okna – zwracana jest krotka składającą się z: elementu event (np. nazwy przycisku lub None gdy naciśnięto przycisk zamykania okna) oraz słownika zawierającego klucze opisujące pola wprowadzania okna oraz wartości wprowadzone w te pola. Gdy nie podano argumentu key dla pola wprowadzania podczas tworzenia layoutu, to domyślnie kluczami słownika są kolejne wartości całkowitoliczbowe. W powyższym przykładzie wpisany tekst, który jest zapisany w słowniku values jako wartość klucza 0, jest przekazywany jako element napisu wyświetlanego w okienku popup (Okno wyświetlające dane).

Okienkowe aplikacje w Pythonie i PyQt5

W Pythonie możemy wykorzystywać pliki .ui opisujące wygląd interfejsu wygenerowanego w narzędziu Qt Designer. Aby uruchomić aplikację okienkową wykorzystującą xml-owy plik ui zawierający wygląd interfejsu i korzystającą z biblioteki Qt należy zainstalować nakładkę PyQt5 tzn.

pip install PyQt5

Następnie już możemy skorzystać z następującego kodu, który ładuje plik ui i ustawia tytuł okna aplikacji

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5 import uic

class MyApp(QMainWindow):
    def __init__(self):
        QMainWindow.__init__(self)
        QMainWindow.setWindowTitle(self, 'App Window Title')
        uic.loadUi('app.ui', self)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MyApp()
    window.show()
    sys.exit(app.exec_())

Powyższy kod jeszcze niczego nie robi, poza wyświetleniem okna z wybranymi przyciskami, etykietami itp. Aby te elementy mogły reagować np. na kliknięcie, należy zdefiniować sygnały i sloty dla elementu GUI np. dla przycisku o nazwie calculateButton tworzymy metodę, która będzie slotem odpowiadającym na sygnał clicked. Listę sygnałów, na które może odpowiadać dany element można znaleźć w dokumentacji biblioteki Qt. Przypisanie metody reagującej na sygnał umieszczamy w metodzie __init__() tzn.

self.calculateButton.clicked.connect(self.my_calculate_function)

a następnie definiujemy metodę, która będzie się uruchamiać po naciśnięciu przycisku:

def my_calculate_function(self):
        pass