PyQt5 - QSplitter 小部件

  • 简述

    这是另一个高级布局管理器,它允许通过拖动它们之间的边界来动态更改子小部件的大小。Splitter 控件提供了一个可以拖动以调整控件大小的句柄。
    中的小部件QSplitter默认情况下,对象是水平放置的,尽管方向可以更改为 Qt.Vertical。
    以下是 QSplitter 类的方法和信号 -
    序号 方法和描述
    1
    addWidget()
    将小部件添加到拆分器的布局
    2
    indexOf()
    返回布局中小部件的索引
    3
    insetWidget()
    在指定索引处插入一个小部件
    4
    setOrientation()
    将拆分器的布局设置为 Qt.Horizo​​ntal 或 Qt.Vertical
    5
    setSizes()
    设置每个小部件的初始大小
    6
    count()
    返回拆分器小部件中的小部件数量
    splitterMoved() 是 QSplitter 对象在拖动拆分器句柄时发出的唯一信号。
  • 例子

    下面的示例有一个拆分器对象 splitter1,其中水平添加了一个框架和 QTextEdit 对象。
    
    topleft = QFrame()
    textedit = QTextEdit()
    splitter1.addWidget(topleft)
    splitter1.addWidget(textedit)
    
    此拆分器对象 splitter1 和底部框架对象垂直添加到另一个拆分器 splitter2 中。对象拆分器最终添加到顶层窗口中。
    
    bottom = QFrame()
    splitter2 = QSplitter(Qt.Vertical)
    splitter2.addWidget(splitter1)
    splitter2.addWidget(bottom)
    
    hbox.addWidget(splitter2)
    self.setLayout(hbox)
    
    完整的代码如下 -
    
    import sys
    from PyQt5.QtCore import *
    from PyQt5.QtGui import *
    from PyQt5.QtWidgets 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()
    
    上面的代码产生以下输出 -
    QSplitter 小部件输出