Ricerca…


Osservazioni

Questa sezione fornisce una panoramica di cosa sia Pyqt5 e perché uno sviluppatore potrebbe volerlo utilizzare.

Dovrebbe anche menzionare qualsiasi argomento di grandi dimensioni all'interno di pyqt5 e collegarsi agli argomenti correlati. Poiché la documentazione di pyqt5 è nuova, potrebbe essere necessario creare versioni iniziali di tali argomenti correlati.

Installazione o configurazione

  1. Installa Anaconda (PyQt5 è built-in), specialmente per utenti Windows.
  2. Integrare QtDesigner e QtUIConvert in PyCharm (strumenti esterni)
    • Apri le Settings PyCharm> Tools > External Tools
    • Strumento di creazione (QtDesigner) - utilizzato per modificare i file * .ui
    • Strumento di creazione (PyUIConv) - utilizzato per convertire * .ui in * .py
  3. Scrivi Demo
    • nuovo window.ui per strumento esterno (QtDesigner)
    • convertire in window.py con uno strumento esterno (PyUIConv)
    • dimostrazione
      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_())
      

Ciao esempio del mondo

Questo esempio crea una finestra semplice con un pulsante e una modifica di riga in un layout. Mostra anche come collegare un segnale a uno slot, in modo che facendo clic sul pulsante si aggiunga del testo alla modifica della riga.

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

Analisi

app = QtWidgets.QApplication(sys.argv)

Ogni applicazione PyQt5 deve creare un oggetto applicazione. Il parametro sys.argv è un elenco di argomenti da una riga di comando. Gli script Python possono essere eseguiti dalla shell.

w = QWidget()

Il widget QWidget è la classe base di tutti gli oggetti dell'interfaccia utente in PyQt5. Forniamo il costruttore predefinito per QWidget . Il costruttore predefinito non ha un genitore. Un widget senza genitore è chiamato una finestra.

w.resize(250, 150)

Il metodo resize() ridimensiona il widget. È largo 250px e alto 150px.

w.move(300, 300)

Il metodo move() sposta il widget in una posizione sullo schermo con x = 300, y = 300 coordinate.

w.setWindowTitle('Hello World')

Qui impostiamo il titolo per la nostra finestra. Il titolo è mostrato nella barra del titolo.

w.show()

Il metodo show() visualizza il widget sullo schermo. Un widget viene prima creato in memoria e successivamente mostrato sullo schermo.

sys.exit(app.exec_())

Infine, entriamo nel mainloop dell'applicazione. La gestione degli eventi inizia da questo punto. Il mainloop riceve eventi dal sistema di finestre e li invia ai widget dell'applicazione. Il mainloop termina se chiamiamo il metodo exit() o il widget principale viene distrutto. Il metodo sys.exit() garantisce un'uscita pulita. L'ambiente verrà informato su come è finita l'applicazione.

Il metodo exec_() ha un trattino basso. È perché l'exec è una parola chiave Python. E così, exec_() , è stato usato exec_() .

Aggiunta di un'icona di applicazione

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

Analisi

Argomenti di funzione in Python

In Python, le funzioni definite dall'utente possono assumere quattro diversi tipi di argomenti.

  1. Argomenti predefiniti:
  • Definizione della funzione

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

  • Chiamata di funzione

    defaultArg( name)

  1. Argomenti richiesti:
  • Definizione della funzione

    def requiredArg (str,num):

  • Chiamata di funzione:

    requiredArg ("Hello",12)

  1. Argomenti della parola chiave:
  • Definizione della funzione

    def keywordArg( name, role ):

  • Chiamata di funzione

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

    o

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

  1. Numero variabile di argomenti:
  • Definizione della funzione

    def varlengthArgs(*varargs):

  • Chiamata di funzione

    varlengthArgs(30,40,50,60)

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

Tre cose importanti nella programmazione orientata agli oggetti sono classi, dati e metodi. Qui creiamo una nuova classe chiamata Example . La classe Example eredita dalla classe QWidget . Ciò significa che chiamiamo due costruttori: il primo per la classe Example e il secondo per la classe ereditata. Il metodo super() restituisce l'oggetto padre della classe Example e chiamiamo il suo costruttore. La variabile self riferisce all'oggetto stesso.

Perché abbiamo usato __init__ ?

Controllalo:

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

class B(object):
    lst = []

e ora prova:

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

e questo:

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

Questo significa che x in classe B è stabilito prima dell'istanziazione?

Sì, è un attributo di classe (è condiviso tra le istanze). Mentre è in classe A è un attributo di istanza.

self.initUI() 

La creazione della GUI è delegata al metodo initUI() .

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

Tutti e tre i metodi sono stati ereditati dalla classe QWidget . setGeometry() fa due cose: individua la finestra sullo schermo e imposta le sue dimensioni. I primi due parametri sono le posizioni xey della finestra. Il terzo è la larghezza e il quarto è l'altezza della finestra. In effetti, combina i metodi resize() e move() in un unico metodo. L'ultimo metodo imposta l'icona dell'applicazione. Per fare questo, abbiamo creato un oggetto QIcon . QIcon riceve il percorso della nostra icona per essere visualizzato.

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

Gli oggetti applicazione e di esempio vengono creati. Il ciclo principale è iniziato.

Mostrando un suggerimento

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

Analisi

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

Questo metodo statico imposta un font utilizzato per il rendering dei tooltip. Utilizziamo un font SansSerif 10px.

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

Per creare un suggerimento, chiamiamo il metodo setTooltip() . Possiamo usare la formattazione rich text.

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

Creiamo un widget pulsante e impostiamo un suggerimento per esso.

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

Il pulsante viene ridimensionato e spostato sulla finestra. Il metodo sizeHint() fornisce una dimensione consigliata per il pulsante.

Imballa il tuo progetto in excutable / installer

cx_Freeze - uno strumento può impacchettare il tuo progetto su excutable / installer

  • dopo averlo installato da pip, per demo.py , abbiamo bisogno di setup.py qui sotto.
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)])
  • quindi costruisci
python .\setup.py build
  • quindi dist
python .\setup.py bdist_msi


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow