PyQt - QSplitter 控件



这是一种高级的布局管理器,它允许通过拖动子控件之间的边界来动态更改子控件的大小。分割器控件提供一个可以拖动以调整控件大小的句柄。

QSplitter 对象中的控件默认情况下水平排列,尽管方向可以更改为 Qt.Vertical。

以下是 QSplitter 类的 方法和信号:

序号 方法及描述
1

addWidget()

将控件添加到分割器的布局中

2

indexOf()

返回控件在布局中的索引

3

insertWidget()

在指定索引处插入控件

4

setOrientation()

将分割器的布局设置为 Qt.Horizontal 或 Qt.Vertical

5

setSizes()

设置每个控件的初始大小

6

count()

返回分割器控件中的控件数量

splitterMoved() 是 QSplitter 对象在每次拖动分割器句柄时发出的唯一信号。

示例

以下示例中有一个分割器对象 splitter1,其中水平添加了一个框架和一个 QTextEdit 对象。

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

这个 splitter1 分割器对象和一个底部的框架对象垂直添加到另一个分割器 splitter2 中。最后,splitter2 对象添加到顶级窗口中。

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

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

完整的代码如下:

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

以上代码产生以下输出:

QSplitter Widget Output
广告

© . All rights reserved.