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