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 -