PyQt5 - Gestione del layout

Un widget GUI può essere posizionato all'interno della finestra del contenitore specificando le sue coordinate assolute misurate in pixel. Le coordinate sono relative alle dimensioni della finestra definite dal metodo setGeometry ().

sintassi setGeometry ()

QWidget.setGeometry(xpos, ypos, width, height)

Nel seguente frammento di codice, la finestra di livello superiore con dimensioni di 300 x 200 pixel viene visualizzata nella posizione (10, 10) sul monitor.

import sys
from PyQt4 import QtGui

def window():
   app = QtGui.QApplication(sys.argv)
   w = QtGui.QWidget()
	
   b = QtGui.QPushButton(w)
   b.setText("Hello World!")
   b.move(50,20)
	
   w.setGeometry(10,10,300,200)
   w.setWindowTitle(“PyQt”)
   w.show()
   sys.exit(app.exec_())
	
if __name__ == '__main__':
   window()

UN PushButton widget viene aggiunto nella finestra e posizionato in una posizione di 50 pixel verso destra e 20 pixel sotto la posizione in alto a sinistra della finestra.

Questo posizionamento assoluto, tuttavia, non è adatto per i seguenti motivi:

  • La posizione del widget non cambia anche se la finestra viene ridimensionata.

  • L'aspetto potrebbe non essere uniforme su diversi dispositivi di visualizzazione con risoluzioni diverse.

  • La modifica del layout è difficile in quanto potrebbe essere necessario ridisegnare l'intero modulo.

PyQt API fornisce classi di layout per una gestione più elegante del posizionamento dei widget all'interno del contenitore. I vantaggi dei gestori di layout rispetto al posizionamento assoluto sono:

  • I widget all'interno della finestra vengono ridimensionati automaticamente.

  • Assicura un aspetto uniforme su dispositivi di visualizzazione con diverse risoluzioni.

  • È possibile aggiungere o rimuovere widget dinamicamente senza dover riprogettare.

Il toolkit Qt definisce vari layout che possono essere utilizzati con l'utilità Qt Designer.

Ecco l'elenco delle classi di cui discuteremo una per una in questo capitolo.

Sr.No. Classi e descrizione
1 QBoxLayout

La classe QBoxLayout allinea i widget verticalmente o orizzontalmente. Le sue classi derivate sono QVBoxLayout (per disporre i widget verticalmente) e QHBoxLayout (per disporre i widget orizzontalmente).

2 QGridLayout

Un oggetto di classe GridLayout si presenta con una griglia di celle disposte in righe e colonne. La classe contiene il metodo addWidget (). Qualsiasi widget può essere aggiunto specificando il numero di righe e colonne della cella.

3 QFormLayout

QFormLayout è un modo conveniente per creare un modulo a due colonne, in cui ogni riga è costituita da un campo di input associato a un'etichetta. Per convenzione, la colonna di sinistra contiene l'etichetta e la colonna di destra contiene un campo di input.