Sök…


Anmärkningar

Det här avsnittet ger en översikt över vad pyqt5 är, och varför en utvecklare kanske vill använda den.

Det bör också nämna alla stora ämnen inom pyqt5 och länka till relaterade ämnen. Eftersom dokumentationen för pyqt5 är ny, kan du behöva skapa initialversioner av relaterade ämnen.

Installation eller installation

  1. Installera Anaconda (PyQt5 är inbyggt), särskilt för Windows-användare.
  2. Integrera QtDesigner och QtUIConvert i PyCharm (externa verktyg)
    • Öppna PyCharm- Settings > Tools > External Tools
    • Skapa verktyg (QtDesigner) - används för att redigera * .ui-filer
    • Skapa verktyg (PyUIConv) - används för att konvertera * .ui till * .py
  3. Skriv demo
    • nytt windows.ui av externt verktyg (QtDesigner)
    • konvertera till windows.py med externt verktyg (PyUIConv)
    • demo
      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_())
      

Hej världsexempel

Det här exemplet skapar ett enkelt fönster med en knapp och en radredigering i en layout. Det visar också hur man ansluter en signal till en plats, så att genom att klicka på knappen läggs lite text till radredigeringen.

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

Analys

app = QtWidgets.QApplication(sys.argv)

Varje PyQt5-program måste skapa ett applikationsobjekt. Parametern sys.argv är en lista med argument från en kommandorad. Python-skript kan köras från skalet.

w = QWidget()

QWidget är basklassen för alla användargränssnittsobjekt i PyQt5. Vi tillhandahåller standardkonstruktören för QWidget . Standardkonstruktören har ingen förälder. En widget utan förälder kallas ett fönster.

w.resize(250, 150)

Metoden Resize resize() ändrar storleken på widgeten. Den är 250px bred och 150px hög.

w.move(300, 300)

Metoden för att move() flyttar widgeten till en position på skärmen vid x = 300, y = 300 koordinater.

w.setWindowTitle('Hello World')

Här ställer vi in titeln för vårt fönster. Titeln visas i titelraden.

w.show()

Metoden show() visar widgeten på skärmen. En widget skapas först i minnet och visas senare på skärmen.

sys.exit(app.exec_())

Slutligen går vi in i huvudslingan i applikationen. Händelseshanteringen börjar från denna punkt. Huvudslingan tar emot händelser från fönstersystemet och skickar dem till applikationswidgets. Huvudslingan avslutas om vi kallar metoden exit() eller huvud widgeten förstörs. sys.exit() garanterar en ren utgång. Miljön informeras om hur ansökan avslutades.

exec_() har en understruk. Det beror på att exec är ett Python-nyckelord. Och därmed användes exec_() istället.

Lägga till en applikationsikon

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

Analys

Funktionsargument i Python

I Python kan användardefinierade funktioner ta fyra olika typer av argument.

  1. Standardargument:
  • Funktionsdefinition

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

  • Funktionssamtal

    defaultArg( name)

  1. Obligatoriska argument:
  • Funktionsdefinition

    def requiredArg (str,num):

  • Funktionssamtal:

    requiredArg ("Hello",12)

  1. Sökordsargument:
  • Funktionsdefinition

    def keywordArg( name, role ):

  • Funktionssamtal

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

    eller

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

  1. Variabelt antal argument:
  • Funktionsdefinition

    def varlengthArgs(*varargs):

  • Funktionssamtal

    varlengthArgs(30,40,50,60)

class Example(QWidget):
    
    def __init__(self):
        super().__init__()
        ...

Tre viktiga saker i objektorienterad programmering är klasser, data och metoder. Här skapar vi en ny klass som heter Example . Klassen Example ärver från klassen QWidget . Det betyder att vi kallar två konstruktörer: den första för klassen Example och den andra för den ärvda klassen. Metoden super() returnerar moderobjektet i klassen Example och vi kallar dess konstruktör. Den self variabel avser själva objektet.

Varför har vi använt __init__ ?

Kolla in det här:

class A(object):
    def __init__(self):
        self.lst = []

class B(object):
    lst = []

och försök nu:

>>> x = B()
>>> y = B()
>>> x.lst.append(1)
>>> y.lst.append(2)
>>> x.lst
[1, 2]
>>> x.lst is y.lst
True

och detta:

>>> x = A()
>>> y = A()
>>> x.lst.append(1)
>>> y.lst.append(2)
>>> x.lst
[1]
>>> x.lst is y.lst
False

Betyder det att x i klass B är etablerat före instans?

Ja, det är ett klassattribut (det delas mellan instanser). I klass A är det ett instansattribut.

self.initUI() 

Skapandet av GUI delegeras till initUI() .

self.setGeometry(300, 300, 300, 220)
self.setWindowTitle('Icon')
self.setWindowIcon(QIcon('web.png'))  

Alla tre metoderna ärvdes från QWidget klassen. setGeometry() gör två saker: den lokaliserar fönstret på skärmen och ställer in storlek. De två första parametrarna är fönstren x och y. Den tredje är bredden och den fjärde är fönstrets höjd. I själva verket kombinerar den resize() och move() -metoderna i en metod. Den sista metoden anger applikationsikonen. För att göra detta har vi skapat ett QIcon objekt. QIcon får sökvägen till vår ikon som ska visas.

if __name__ == '__main__':
    
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

Applikationen och exempelobjekt skapas. Huvudslingan startas.

Visar ett verktygstips

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

Analys

QToolTip.setFont(QFont('SansSerif', 10))

Denna statiska metod anger ett teckensnitt som används för att återge verktygstips. Vi använder ett 10px SansSerif-teckensnitt.

self.setToolTip('This is a <b>QWidget</b> widget')

För att skapa ett verktygstips kallar setTooltip() metoden setTooltip() . Vi kan använda formatering av rik text.

btn = QPushButton('Button', self)
btn.setToolTip('This is a <b>QPushButton</b> widget')

Vi skapar en tryckknapp-widget och ställer in ett verktygstips för den.

btn.resize(btn.sizeHint())
btn.move(50, 50) 

Ändra storlek på knappen och flyttas i fönstret. sizeHint() ger en rekommenderad storlek för knappen.

Packa ditt projekt i excutable / installer

cx_Freeze - ett verktyg kan paketera ditt projekt till excutable / installer

  • efter att ha installerat det med pip, för att paketera demo.py , behöver vi setup.py nedan.
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)])
  • bygg sedan
python .\setup.py build
  • sedan dist
python .\setup.py bdist_msi


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow