pyqt5 Samouczek
Rozpoczęcie pracy z pyqt5
Szukaj…
Uwagi
W tej sekcji omówiono, czym jest pyqt5 i dlaczego deweloper może chcieć go użyć.
Powinien również wymieniać wszelkie duże tematy w pyqt5 i zawierać linki do powiązanych tematów. Ponieważ Dokumentacja dla pyqt5 jest nowa, może być konieczne utworzenie początkowych wersji tych pokrewnych tematów.
Instalacja lub konfiguracja
- Zainstaluj Anacondę (PyQt5 jest wbudowany), szczególnie dla użytkownika systemu Windows.
- Zintegruj QtDesigner i QtUIConvert w PyCharm (narzędzia zewnętrzne)
- Napisz wersję demonstracyjną
- nowe window.ui przez narzędzie zewnętrzne (QtDesigner)
- przekonwertować na window.py za pomocą zewnętrznego narzędzia (PyUIConv)
- próbny
import sys from PyQt5.QtWidgets import QApplication,QMainWindow from window import Ui_MainWindow if __name__ == '__main__': app = QApplication(sys.argv) w = QMainWindow() ui = Ui_MainWindow() ui.setupUi(w) w.show() sys.exit(app.exec_())
Przykład Hello World
Ten przykład tworzy proste okno z przyciskiem i edycją linii w układzie. Pokazuje także, jak podłączyć sygnał do gniazda, tak że kliknięcie przycisku powoduje dodanie tekstu do edycji linii.
import sys
from PyQt5.QtWidgets import QApplication, QWidget
if __name__ == '__main__':
app = QApplication(sys.argv)
w = QWidget()
w.resize(250, 150)
w.move(300, 300)
w.setWindowTitle('Hello World')
w.show()
sys.exit(app.exec_())
Analiza
app = QtWidgets.QApplication(sys.argv)
Każda aplikacja PyQt5 musi utworzyć obiekt aplikacji. Parametr sys.argv to lista argumentów z wiersza poleceń. Skrypty w języku Python można uruchamiać z powłoki.
w = QWidget()
Widżet QWidget
to podstawowa klasa wszystkich obiektów interfejsu użytkownika w PyQt5. Zapewniamy domyślny konstruktor dla QWidget
. Domyślny konstruktor nie ma rodzica. Widżet bez elementu nadrzędnego nazywa się oknem.
w.resize(250, 150)
Metoda resize()
zmienia rozmiar widżetu. Ma szerokość 250 pikseli i wysokość 150 pikseli.
w.move(300, 300)
Metoda move()
przenosi widżet do pozycji na ekranie o współrzędnych x = 300, y = 300.
w.setWindowTitle('Hello World')
Tutaj ustawiamy tytuł naszego okna. Tytuł jest wyświetlany na pasku tytułowym.
w.show()
Metoda show()
wyświetla widżet na ekranie. Widżet jest najpierw tworzony w pamięci, a następnie wyświetlany na ekranie.
sys.exit(app.exec_())
Na koniec wchodzimy na główny pasek aplikacji. Obsługa zdarzeń rozpoczyna się od tego momentu. Pętla główna odbiera zdarzenia z systemu okien i rozsyła je do widżetów aplikacji. Pętla główna kończy się, jeśli wywołamy metodę exit()
lub główny widget zostanie zniszczony. Metoda sys.exit()
zapewnia czyste wyjście. Środowisko zostanie poinformowane o zakończeniu aplikacji.
Metoda exec_()
ma podkreślenie. Jest tak, ponieważ exec jest słowem kluczowym Python. I tak zamiast tego użyto exec_()
.
Dodanie ikony aplikacji
import sys
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtGui import QIcon
class Example(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setGeometry(300, 300, 300, 220)
self.setWindowTitle('Icon')
self.setWindowIcon(QIcon('web.png'))
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
Analiza
Argumenty funkcji w Pythonie
W Pythonie funkcje zdefiniowane przez użytkownika mogą przyjmować cztery różne typy argumentów.
- Domyślne argumenty:
Definicja funkcji
def defaultArg( name, msg = "Hello!"):
Wywołanie funkcji
defaultArg( name)
- Wymagane argumenty:
Definicja funkcji
def requiredArg (str,num):
Wywołanie funkcji:
requiredArg ("Hello",12)
- Argumenty słów kluczowych:
Definicja funkcji
def keywordArg( name, role ):
Wywołanie funkcji
keywordArg( name = "Tom", role = "Manager")
lub
keywordArg( role = "Manager", name = "Tom")
- Zmienna liczba argumentów:
Definicja funkcji
def varlengthArgs(*varargs):
Wywołanie funkcji
varlengthArgs(30,40,50,60)
class Example(QWidget):
def __init__(self):
super().__init__()
...
Trzy ważne rzeczy w programowaniu obiektowym to klasy, dane i metody. Tutaj tworzymy nową klasę o nazwie Example
. Klasa Example
dziedziczy po klasie QWidget
. Oznacza to, że wywołujemy dwa konstruktory: pierwszy dla klasy Example
i drugi dla klasy odziedziczonej. Metoda super()
zwraca obiekt nadrzędny klasy Example
i wywołujemy jego konstruktor. Zmienna self
odnosi się do samego obiektu.
Dlaczego użyliśmy __init__
?
Sprawdź to:
class A(object):
def __init__(self):
self.lst = []
class B(object):
lst = []
a teraz spróbuj:
>>> x = B()
>>> y = B()
>>> x.lst.append(1)
>>> y.lst.append(2)
>>> x.lst
[1, 2]
>>> x.lst is y.lst
True
i to:
>>> x = A()
>>> y = A()
>>> x.lst.append(1)
>>> y.lst.append(2)
>>> x.lst
[1]
>>> x.lst is y.lst
False
Czy to oznacza, że x w klasie B jest ustalany przed wystąpieniem?
Tak, jest to atrybut klasy (jest dzielony między instancjami). Podczas gdy w klasie A jest to atrybut instancji.
self.initUI()
Tworzenie GUI jest delegowane do metody initUI()
.
self.setGeometry(300, 300, 300, 220)
self.setWindowTitle('Icon')
self.setWindowIcon(QIcon('web.png'))
Wszystkie trzy metody zostały odziedziczone z klasy QWidget
. setGeometry()
robi dwie rzeczy: lokalizuje okno na ekranie i ustawia jego rozmiar. Pierwsze dwa parametry to pozycje xiy okna. Trzecia to szerokość, a czwarta to wysokość okna. W rzeczywistości łączy metody resize()
i move()
w jednej metodzie. Ostatnia metoda ustawia ikonę aplikacji. Aby to zrobić, stworzyliśmy obiekt QIcon
. QIcon
otrzymuje ścieżkę do naszej ikony do wyświetlenia.
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
Aplikacja i przykładowe obiekty są tworzone. Główna pętla jest uruchomiona.
Wyświetlanie podpowiedzi
import sys
from PyQt5.QtWidgets import (QWidget, QToolTip,
QPushButton, QApplication)
from PyQt5.QtGui import QFont
class Example(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
QToolTip.setFont(QFont('SansSerif', 10))
self.setToolTip('This is a <b>QWidget</b> widget')
btn = QPushButton('Button', self)
btn.setToolTip('This is a <b>QPushButton</b> widget')
btn.resize(btn.sizeHint())
btn.move(50, 50)
self.setGeometry(300, 300, 300, 200)
self.setWindowTitle('Tooltips')
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
Analiza
QToolTip.setFont(QFont('SansSerif', 10))
Ta statyczna metoda ustawia czcionkę używaną do renderowania podpowiedzi. Używamy czcionki SansSerif 10px.
self.setToolTip('This is a <b>QWidget</b> widget')
Aby utworzyć etykietkę, wywołujemy setTooltip()
. Możemy użyć formatowania tekstu sformatowanego.
btn = QPushButton('Button', self)
btn.setToolTip('This is a <b>QPushButton</b> widget')
Tworzymy widget przycisku i ustawiamy dla niego podpowiedź.
btn.resize(btn.sizeHint())
btn.move(50, 50)
Przycisk jest zmieniany i przesuwany w oknie. Metoda sizeHint()
podaje zalecany rozmiar przycisku.
Spakuj swój projekt w edytowalny / instalator
cx_Freeze - narzędzie może spakować twój projekt do excutable / installer
- po instalacji przez pip, aby spakować
demo.py
, potrzebujemysetup.py
poniżej.
import sys
from cx_Freeze import setup, Executable
# Dependencies are automatically detected, but it might need fine tuning.
build_exe_options = {
"excludes": ["tkinter"],
"include_files":[('./platforms','./platforms')] # need qwindows.dll for qt5 application
}
# GUI applications require a different base on Windows (the default is for a
# console application).
base = None
if sys.platform == "win32":
base = "Win32GUI"
setup( name = "demo",
version = "0.1",
description = "demo",
options = {"build_exe": build_exe_options},
executables = [Executable("demo.py", base=base)])
- następnie buduj
python .\setup.py build
- następnie dist
python .\setup.py bdist_msi