转载来自: http://blog.sina.com.cn/s/blog_4b5039210100h3ih.html
分割窗口在应用程序中经常用到,它可以灵活分布窗口布局,经常用于类似文件资源管理器的窗口设计中。
QSplitter是用来分割窗口的
如下代码:
1 # -*- coding: utf-8 -*- 2 from PyQt4 import QtCore,QtGui 3 from PyQt4.QtGui import * 4 from PyQt4.QtCore import * 5 import sys 6 QtCore.QTextCodec.setCodecForTr(QtCore.QTextCodec.codecForName("utf8")) 7 class Csplitter(QtGui.QMainWindow): 8 def __init__(self,parent=None): 9 super(Csplitter,self).__init__(parent) 10 self.resize(400,400) 11 self.setWindowTitle('Pyqt Qsplitter') 12 self.textedit = QTextEdit() 13 self.textedit.setText("This is a TextEdit!") 14 self.listwidget = QListWidget() 15 self.listwidget.addItem("This is a ListWidget!") 16 self.listwidget.addItem("aaaaaaaaaaaaaaa") 17 self.treewidget = QTreeWidget() 18 self.treewidget.setHeaderLabels(['This','is','a','TreeWidgets!']) 19 splitter = QSplitter(self) 20 splitter.addWidget(self.textedit) 21 splitter.addWidget(self.listwidget) 22 splitter.addWidget(self.treewidget) 23 splitter.setOrientation(Qt.Vertical) # Qt.Vertical 垂直 Qt.Horizontal 水平 24 self.setCentralWidget(splitter) 25 26 if __name__ == '__main__': 27 app= QtGui.QApplication(sys.argv) 28 main = Csplitter() 29 main.show() 30 sys.exit(app.exec_())
效果:
QmainWindow上面有三个widget,一个TextEdit,一个ListWidget,一个TreeWidget,要让他们分占窗口,并且鼠标放到两个widget的边界,还可以拖拽来改变widget的大小
我们创建了三个widget以后,我们通过创建一个Qsplitter(parent),注意它的参数此处是self,也就是我们的MainWindow。
然后把三个widget通过addwidget方法加到Qsplitter上,如果我们不调用setOrientation(Qt.Vertical)的话,三个控件默认是水平摆放的,这里我们调用了,变为了垂直摆放,最后把splitter放到了MainWindow上。
另外Qsplitter还有别的很多methods。
Qsplitter.insertWidget(self,int index,Qwidget widget)在index序号处插入一个widget。
Qsplitter.indexOf(self,Qwidget widget)可以得到一个widget的index。
当然如果要隐藏某一个widget,可以调用hide()方法,要显示可以调用show()方法。
Qsplitter.count()返回一个splitter里面的widget的数目。
QSplitter.restoreState()和QSplitter.saveState()用来保存和恢复状态,一般和Qsetting一起使用。