QGridLayout(網格布局)
QGridLayout(網格布局)是將窗口分隔成行和列的網格來進行排列。通常可以使用函數addWidget()將被管理的控件(Widget)添加到窗口中,或者使用addLayout()
函數將布局(Layout)添加到窗口中。也可以通過addWidget()函數對所添加的控件
設置行數和列數的跨越,最后實現網格占據多個窗格。
QGridLayout類中的常用方法如表6-4所示。
方法 | 描述 |
---|---|
addWidget(QWidget widget,int row,int col,int alignement=0) | 給網格布局添加控件,設置指定的行和列。起始位置(top-left position)的默認值是(0,0)。widget:所添加的控件;row:控件的行數,默認從0開始;column:控件的列,默認從0開始;alignemnt:引對齊方式 |
addWidget(QWidget widget,intfromRow,int fromColumn,int rowSpan,int columnSpan,Qt.Alignment alignment=0) | 所添加的控件跨越很多行或者列時,使用這個函數。widget:所添加的控件;fromRow:控件的起始行數;fromcolumn:控件的起始列數;rowSpan:控件跨越的行數;columnSpan:控件跨的列數;alignment:對齊方式 |
setSpacing(int spacing) | 設置控件在水平和垂直方向間隔 |
QGridLayout類的繼承結構如下:
QObect|+- QLayout|+- QGridLayout
單一的網格單元格
import sys
from PyQt5.QtWidgets import QApplication,QWidget,QHBoxLayout,QPushButton
from PyQt5.QtCore import Qtclass Winform(QWidget):def __init__(self,parent=None):super(Winform,self).__init__(parent)self.setWindowTitle("水平布局管理例子")# 水平布局按照從左到右的順序進行添加按鈕部件hlayout = QHBoxLayout()hlayout.addWidget(QPushButton(str(1)))hlayout.addWidget(QPushButton(str(2)))hlayout.addWidget(QPushButton(str(3)))hlayout.addWidget(QPushButton(str(4)))hlayout.addWidget(QPushButton(str(5)))# 設置控件間的間距hlayout.setSpacing(0)self.setLayout(hlayout)if __name__ == '__main__':app = QApplication(sys.argv)form=Winform()form.show()sys.exit(app.exec_())
跨越行和列的網格單元格
import sys
from PyQt5.QtWidgets import QWidget,QLabel,QLineEdit,QTextEdit,QGridLayout,QApplicationclass Winform(QWidget):def __init__(self,parent=None):super(Winform,self).__init__(parent)self.initUI()def initUI(self):title=QLabel('標題')author=QLabel('提交人')review=QLabel('申告內容')titleEdit=QLineEdit()authorEdit=QLineEdit()reviewEdit=QLineEdit()grid=QGridLayout()grid.setSpacing(10)grid.addWidget(title,1,0)grid.addWidget(titleEdit,1,1)grid.addWidget(author,2,0)grid.addWidget(authorEdit,2,1)grid.addWidget(review,3,0)grid.addWidget(reviewEdit,3,1,5,1)self.setLayout(grid)self.setGeometry(300,300,350,300)self.setWindowTitle('故障申告')if __name__ == '__main__':app = QApplication(sys.argv)form=Winform()form.show()sys.exit(app.exec_())
運行結果