pyqt布局管理器QGridLayout简单示例

# _*_ 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_())
View Code

展示了如何通过QGridLayout实现窗体控件布局管理。同时,简单的实现了一下两个界面之间的切换。

 

 

 

解释一下如何删除一个部件管理器的组件:

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

 

posted @ 2017-03-27 23:53  超级学渣渣  阅读(7633)  评论(0编辑  收藏  举报