PyQt - Widget QSplitter
Questo è un altro gestore di layout avanzato che consente di modificare dinamicamente le dimensioni dei widget figlio trascinando i confini tra di loro. Il controllo Splitter fornisce una maniglia che può essere trascinata per ridimensionare i controlli.
I widget in un file QSplitter gli oggetti sono disposti orizzontalmente per impostazione predefinita, sebbene l'orientamento possa essere modificato in Qt. Verticale.
Di seguito sono riportati i metodi e i segnali della classe QSplitter:
| Sr.No. | Metodi e descrizione | 
|---|---|
| 1 | addWidget() Aggiunge il widget al layout dello splitter | 
| 2 | indexOf() Restituisce l'indice del widget nel layout | 
| 3 | insetWidget() Inserisce un widget all'indice specificato | 
| 4 | setOrientation() Imposta il layout dello splitter su Qt. Orizzontale o Qt. Verticale | 
| 5 | setSizes() Imposta la dimensione iniziale di ogni widget | 
| 6 | count() Restituisce il numero di widget nel widget splitter | 
splitterMoved () è l'unico segnale emesso dall'oggetto QSplitter ogni volta che viene trascinata la maniglia dello splitter.
Esempio
L'esempio seguente ha un oggetto splitter, splitter1, in cui vengono aggiunti orizzontalmente un frame e un oggetto QTextEdit.
topleft = QFrame()
textedit = QTextEdit()
splitter1.addWidget(topleft)
splitter1.addWidget(textedit)Questo oggetto splitter splitter1 e un oggetto frame inferiore vengono aggiunti in un altro splitter, splitter2, verticalmente. Il separatore di oggetti viene infine aggiunto nella finestra di primo livello.
bottom = QFrame()
splitter2 = QSplitter(Qt.Vertical)
splitter2.addWidget(splitter1)
splitter2.addWidget(bottom)
hbox.addWidget(splitter2)
self.setLayout(hbox)Il codice completo è il seguente:
import sys
from PyQt4.QtGui import *
from PyQt4.QtCore import *
class Example(QWidget):
   def __init__(self):
      super(Example, self).__init__()
		
   self.initUI()
	
   def initUI(self):
	
      hbox = QHBoxLayout(self)
		
      topleft = QFrame()
      topleft.setFrameShape(QFrame.StyledPanel)
      bottom = QFrame()
      bottom.setFrameShape(QFrame.StyledPanel)
		
      splitter1 = QSplitter(Qt.Horizontal)
      textedit = QTextEdit()
      splitter1.addWidget(topleft)
      splitter1.addWidget(textedit)
      splitter1.setSizes([100,200])
		
      splitter2 = QSplitter(Qt.Vertical)
      splitter2.addWidget(splitter1)
      splitter2.addWidget(bottom)
		
      hbox.addWidget(splitter2)
		
      self.setLayout(hbox)
      QApplication.setStyle(QStyleFactory.create('Cleanlooks'))
		
      self.setGeometry(300, 300, 300, 200)
      self.setWindowTitle('QSplitter demo')
      self.show()
		
def main():
   app = QApplication(sys.argv)
   ex = Example()
   sys.exit(app.exec_())
	
if __name__ == '__main__':
   main()Il codice precedente produce il seguente output:
 
                    