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: