meta data for this page
  •  

To jest stara wersja strony!


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ć 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_()