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: