====== 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()