meta data for this page
PyQt
PyQt to biblioteka (nakładka na bibliotekę Qt) do tworzenia graficznego interfejsu użytkownika GUI dla języka Python.
Instalacja
python -m pip install PyQt6 python -m pip install pyqt6-tools
W katalogu Pythona, przykładowo w Windows C:\Python\Lib\site-packages\qt6_applications\Qt\bin znajduje się aplikacja designer.exe, za pomocą której możemy projektować interfejs graficzny. Najlepiej zrobić sobie do niej skrót.
Sprawdzenie zainstalowanych bibliotek:
pip list
Kompilacja
Gotowy projekt zapisany zostaje jako plik z rozszerzeniem .ui, np. hello.ui. Jest to plik XML, który można następnie przekształcić w kod Pythona i wykorzystać w naszym skrypcie. Plik .ui kompilujemy, za pomocą Python UI Compiler, następująco:
pyuic6 -o hello.py hello.ui
Python UI Compiler znajduje się w C:\Python\Lib\site-packages\PyQt6\pyuic.py.
Zdarza się, że polecenie pyuic6 nie działa bezpośrednio w konsoli. Wówczas uruchom program z poziomu Pythona, np. (wypisanie wersji):
python -m PyQt6.uic.pyuic -V
Jeżeli chcesz móc przetestować sam projekt interfejsu, dodaj opcję -x do kompilatora.
pyuic6 -x -o hello_ui.py hello.ui
Teraz będzie możliwe uruchomienie.
python hello_ui.py
Przykładowy skrypt
Tworzymy nowy plik, np. hello.py.
import sys from hello_ui import Ui_Form # Wygenerowany kod from PyQt6 import QtWidgets as qtw from PyQt6 import QtCore as qtc
Wygenerowny kod hello_ui.py zawiera klasę Ui_Form, ale klasa ta sama nie stworzy okna. Aby stworzyć okno, musimy zainicjować osobno QWidget i podać go dla obiektu klasy Ui_Form jako argument metody setupUi(). Inaczej mówiąc nasz wygenerowany kod nie tworzy interfejsu od początku, lecz konfiguruje podany widget, aby wyglądał tak jak chcemy.
W tym celu możemy stworzyć własną klasę, która dziedziczy po QWidget, dzięki czemu dla ui.setupUi() będzie można podać self.
class MyForm(qtw.QWidget): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.ui = Ui_Form() # Tworzymy obiekt UI reprezentujący nasz projekt interfejsu. self.ui.setupUi(self) # Konfigurujemy widget. self.ui.pushButton.clicked.connect(self.do_sth) def do_sth(self): pass if __name__ == '__main__': app = qtw.QApplication(sys.argv) form = MyForm() # Tworzymy okno form.show() app.exec()