PyQt - Widget QSplitter

Este es otro administrador de diseño avanzado que permite cambiar dinámicamente el tamaño de los widgets secundarios arrastrando los límites entre ellos. El control Splitter proporciona un controlador que se puede arrastrar para cambiar el tamaño de los controles.

Los widgets en un QSplitter Los objetos se colocan horizontalmente de forma predeterminada, aunque la orientación se puede cambiar a Qt.Vertical.

A continuación se muestran los métodos y señales de la clase QSplitter:

No Señor. Métodos y descripción
1

addWidget()

Agrega el widget al diseño del divisor

2

indexOf()

Devuelve el índice del widget en el diseño.

3

insetWidget()

Inserta un widget en el índice especificado

4

setOrientation()

Establece el diseño del divisor en Qt.Horizontal o Qt.Vertical

5

setSizes()

Establece el tamaño inicial de cada widget

6

count()

Devuelve el número de widgets en el widget divisor.

splitterMoved () es la única señal emitida por el objeto QSplitter siempre que se arrastra el controlador del divisor.

Ejemplo

El siguiente ejemplo tiene un objeto divisor, splitter1, en el que se añaden horizontalmente un marco y un objeto QTextEdit.

topleft = QFrame()
textedit = QTextEdit()
splitter1.addWidget(topleft)
splitter1.addWidget(textedit)

Este objeto divisor splitter1 y un objeto de marco inferior se agregan en otro divisor, splitter2, verticalmente. Los divisores de objetos finalmente se agregan en la ventana del nivel superior.

bottom = QFrame()
splitter2 = QSplitter(Qt.Vertical)
splitter2.addWidget(splitter1)
splitter2.addWidget(bottom)

hbox.addWidget(splitter2)
self.setLayout(hbox)

El código completo es el siguiente:

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

El código anterior produce la siguiente salida: