# _*_ coding:utf-8 _*_ import sys from PyQt4 import QtGui class Example(QtGui.QWidget): def __init__(self): super(Example,self).__init__() self.grid = QtGui.QGridLayout() self.initUI() self.setWindowTitle('grid layout') def initUI(self): while self.grid.count(): item = self.grid.takeAt(0) widget = item.widget() # if widget has some id attributes you need to # save in a list to maintain order, you can do that here # i.e.: aList.append(widget.someId) widget.deleteLater() names=['Cls','Bck','','Close','7','8','9','/','4', '5','6','*','1','2,','3','-','0','.','=','+'] j=0 pos=[(0,0),(0,1),(0,2),(0,3), (1,0),(1,1),(1,2),(1,3), (2,0),(2,1),(2,2),(2,3), (3,0),(3,1),(3,2),(3,3), (4,0),(4,1),(4,2),(4,3)] for iterm in names: button=QtGui.QPushButton(iterm) if j==2: change=QtGui.QPushButton(u'文本编辑器') self.grid.addWidget(change,0,2) change.clicked.connect(self.otherUI) else: self.grid.addWidget(button,pos[j][0],pos[j][1]) j=j+1 self.setLayout(self.grid) self.resize(300,300) def otherUI(self): while self.grid.count(): item = self.grid.takeAt(0) widget = item.widget() # if widget has some id attributes you need to # save in a list to maintain order, you can do that here # i.e.: aList.append(widget.someId) widget.deleteLater() title=QtGui.QLabel('Title') author=QtGui.QLabel('Author') review=QtGui.QLabel('Review') titleEdit=QtGui.QLineEdit() authorEdit=QtGui.QLineEdit() reviewEdit=QtGui.QTextEdit() self.grid.setSpacing(10) self.grid.addWidget(title,1,0) self.grid.addWidget(titleEdit,1,1) self.grid.addWidget(author,2,0) self.grid.addWidget(authorEdit,2,1) self.grid.addWidget(review,3,0) self.grid.addWidget(reviewEdit,3,1,5,1) back=QtGui.QPushButton(u'返回') back.clicked.connect(self.initUI) self.grid.addWidget(back,6,2) self.setLayout(self.grid) self.resize(300,300) app=QtGui.QApplication(sys.argv) ex=Example() ex.show() sys.exit(app.exec_())
展现了如何经过QGridLayout实现窗体控件布局管理。同时,简单的实现了一下两个界面之间的切换。app
解释一下如何删除一个部件管理器的组件:编辑器
while self.grid.count(): item = self.grid.takeAt(0) widget = item.widget() # if widget has some id attributes you need to # save in a list to maintain order, you can do that here # i.e.: aList.append(widget.someId) widget.deleteLater()