PyQt - Widget QSplitter

Este é outro gerenciador de layout avançado que permite que o tamanho dos widgets filhos seja alterado dinamicamente arrastando os limites entre eles. O controle Divisor fornece uma alça que pode ser arrastada para redimensionar os controles.

Os widgets em um QSplitter os objetos são colocados horizontalmente por padrão, embora a orientação possa ser alterada para Qt.Vertical.

A seguir estão os métodos e sinais da classe QSplitter -

Sr. Não. Métodos e Descrição
1

addWidget()

Adiciona o widget ao layout do divisor

2

indexOf()

Retorna o índice do widget no layout

3

insetWidget()

Insere um widget no índice especificado

4

setOrientation()

Define o layout do divisor para Qt.Horizontal ou Qt.Vertical

5

setSizes()

Define o tamanho inicial de cada widget

6

count()

Retorna o número de widgets no widget divisor

splitterMoved () é o único sinal emitido pelo objeto QSplitter sempre que a alça do divisor é arrastada.

Exemplo

O exemplo a seguir tem um objeto divisor, divisor1, no qual um quadro e um objeto QTextEdit são adicionados horizontalmente.

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

Este objeto divisor divisor1 e um objeto de quadro inferior são adicionados em outro divisor, divisor2, verticalmente. Os divisores de objeto são finalmente adicionados na janela de nível superior.

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

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

O código completo é o seguinte -

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

O código acima produz a seguinte saída -