PyQt - Widget QSplitter

Il s'agit d'un autre gestionnaire de disposition avancé qui permet de modifier dynamiquement la taille des widgets enfants en faisant glisser les limites entre eux. Le contrôle Splitter fournit une poignée qui peut être déplacée pour redimensionner les contrôles.

Les widgets dans un QSplitter Les objets sont disposés horizontalement par défaut bien que l'orientation puisse être modifiée en Qt.Vertical.

Voici les méthodes et les signaux de la classe QSplitter -

Sr.No. Méthodes et description
1

addWidget()

Ajoute le widget à la disposition du séparateur

2

indexOf()

Renvoie l'index du widget dans la mise en page

3

insetWidget()

Insère un widget à l'index spécifié

4

setOrientation()

Définit la disposition du séparateur sur Qt.Horizontal ou Qt.Vertical

5

setSizes()

Définit la taille initiale de chaque widget

6

count()

Renvoie le nombre de widgets dans le widget de fractionnement

splitterMoved () est le seul signal émis par l'objet QSplitter chaque fois que la poignée de séparation est déplacée.

Exemple

L'exemple suivant a un objet séparateur, splitter1, dans lequel un cadre et un objet QTextEdit sont ajoutés horizontalement.

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

Cet objet splitter splitter1 et un objet frame du bas sont ajoutés verticalement dans un autre splitter, splitter2. Les séparateurs d'objets sont enfin ajoutés dans la fenêtre de niveau supérieur.

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

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

Le code complet est le suivant -

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

Le code ci-dessus produit la sortie suivante -