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

  1. Zainstaluj Anacondę (PyQt5 jest wbudowany), szczególnie dla użytkownika systemu Windows.
  2. Zintegruj QtDesigner i QtUIConvert w PyCharm (narzędzia zewnętrzne)
    • Otwórz Settings PyCharm> Tools > External Tools
    • Narzędzie do tworzenia (QtDesigner) - służy do edycji plików * .ui
    • Utwórz narzędzie (PyUIConv) - służy do konwersji * .ui na * .py
  3. 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.

  1. Domyślne argumenty:
  • Definicja funkcji

    def defaultArg( name, msg = "Hello!"):

  • Wywołanie funkcji

    defaultArg( name)

  1. Wymagane argumenty:
  • Definicja funkcji

    def requiredArg (str,num):

  • Wywołanie funkcji:

    requiredArg ("Hello",12)

  1. Argumenty słów kluczowych:
  • Definicja funkcji

    def keywordArg( name, role ):

  • Wywołanie funkcji

    keywordArg( name = "Tom", role = "Manager")

    lub

    keywordArg( role = "Manager", name = "Tom")

  1. 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 , potrzebujemy setup.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


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow