pyqt5讲解10:布局管理讲解大全
一.絕對布局
使用move(x,y)的方法。
絕對布局:
如果改變屏膜的大小,控件的位置不會發生變化,
不同 屏膜顯示有區別
二.QBoxLayout(框布局)
QBoxLayout 類支持在水平和垂直方向上排列控件,其子類有 QHBoxLayout(水平布局) 和 QVBoxLayout(垂直布局)。
1.QHBoxLayout 水平布局
常用方法
| addLayout(self, QLayout, stretch = 0) | 在窗口的右邊添加布局,使用 strtch(伸縮量)進行伸縮,默認伸縮量為 0. |
| addWidget(self, QWidget, stretch, Qt.Alignment alignment) | 在布局中添加控件,伸縮量只適用于 QBoxLayout,控件和窗口會隨著伸縮量的變大而變大 |
| addSpacing(self, int) | 設置各控件的上下間距,通過該方法可以設置增加額外的空間 |
算例
# -*- coding: utf-8 -*-"""【簡介】水平布局管理例子"""import sys from PyQt5.QtWidgets import QApplication ,QWidget ,QHBoxLayout , QPushButtonclass 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))) self.setLayout(hlayout) if __name__ == "__main__": app = QApplication(sys.argv) form = Winform()form.show()sys.exit(app.exec_())個性化設置
# -*- coding: utf-8 -*-"""【簡介】水平布局管理例子"""import sys from PyQt5.QtWidgets import QApplication ,QWidget ,QHBoxLayout , QPushButton from PyQt5.QtCore import Qt class Winform(QWidget):def __init__(self,parent=None):super(Winform,self).__init__(parent)self.setWindowTitle("水平布局管理例子") self.resize(800, 200)# 水平布局按照從左到右的順序進行添加按鈕部件。hlayout = QHBoxLayout() #水平居左 垂直居上 hlayout.addWidget( QPushButton(str(1)) , 0 , Qt.AlignLeft | Qt.AlignTop)hlayout.addWidget( QPushButton(str(2)) , 0 , Qt.AlignLeft | Qt.AlignTop)hlayout.addWidget( QPushButton(str(3)))#水平居左 垂直居下hlayout.addWidget( QPushButton(str(4)) , 0 , Qt.AlignLeft | Qt.AlignBottom ) hlayout.addWidget( QPushButton(str(5)), 0 , Qt.AlignLeft | Qt.AlignBottom) self.setLayout(hlayout) if __name__ == "__main__": app = QApplication(sys.argv) form = Winform()form.show()sys.exit(app.exec_())控制控件之間的距離
# 水平布局按照從左到右的順序進行添加按鈕部件。 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( 50) self.setLayout(hlayout)1.QVBoxLayout垂直布局
算例
addStretch(int stretch=0) 函數
addStretch(int stretch=0) 函數用于在布局管理器中增加一個可伸縮的控件(QSpaceItem),0 為最小值,并且將 stretch 作為伸縮量添加到布局末尾。
# -*- coding: utf-8 -*-'''【簡介】布局中用到的addStretch函數例子'''from PyQt5.QtWidgets import QApplication ,QWidget, QVBoxLayout , QHBoxLayout ,QPushButton import sys class WindowDemo(QWidget): def __init__(self ): super().__init__()btn1 = QPushButton(self)btn2 = QPushButton(self)btn3 = QPushButton(self) btn1.setText('button 1')btn2.setText('button 2')btn3.setText('button 3')hbox = QHBoxLayout()# 設置伸縮量為1hbox.addStretch(1)hbox.addWidget( btn1 )# 設置伸縮量為1hbox.addStretch(1)hbox.addWidget( btn2 )# 設置伸縮量為1hbox.addStretch(1)hbox.addWidget( btn3 )# 設置伸縮量為1hbox.addStretch(1 ) self.setLayout(hbox)self.setWindowTitle("addStretch 例子")if __name__ == "__main__": app = QApplication(sys.argv) win = WindowDemo() win.show() sys.exit(app.exec_()) 如果在第一個控件之前添加伸縮控件,那么所有的控件都會居右顯示;反之,如果在最后一個控件之后添加伸縮控件,呢么所有的孔家都會居左顯示。三.QGridLayout()網格布局
網格布局,將窗口拆分成行和列來放置控件,通常使用 addWidget() 函數添加控件,用 addLayout() 添加子布局。
算例:單一網格布局
# -*- coding: utf-8 -*-"""【簡介】網格布局管理例子"""import sys from PyQt5.QtWidgets import QApplication ,QWidget , QGridLayout, QPushButtonclass Winform(QWidget):def __init__(self,parent=None):super(Winform,self).__init__(parent)self.initUI()def initUI(self): #1grid = QGridLayout() self.setLayout(grid) #2names = ['Cls', 'Back', '', 'Close', '7', '8', '9', '/', '4', '5', '6', '*', '1', '2', '3', '-', '0', '.', '=', '+'] #3 positions = [(i,j) for i in range(5) for j in range(4)] #4 for position, name in zip(positions, names): if name == '': continue button = QPushButton(name) grid.addWidget(button, *position) self.move(300, 150) self.setWindowTitle('網格布局管理例子') if __name__ == "__main__": app = QApplication(sys.argv) form = Winform()form.show()sys.exit(app.exec_())跨越行列式單元網格
除了一個網格一個控件,還可以一個控件占據多個行列。
四.QFormLayout表單布局
表單布局,QFormLayout,實現 label-field 式表單布局的布局控件,主要有兩列構成:信息提示區域和信息輸入區域,前者也叫 label 域,后者也叫 field 域。
# -*- coding: utf-8 -*-import sys from PyQt5.QtWidgets import QApplication ,QWidget ,QFormLayout , QLineEdit, QLabelclass Winform(QWidget):def __init__(self,parent=None):super(Winform,self).__init__(parent)self.setWindowTitle("窗體布局管理例子") self.resize(400, 100) fromlayout = QFormLayout()labl1 = QLabel("標簽1")lineEdit1 = QLineEdit()labl2 = QLabel("標簽2")lineEdit2 = QLineEdit()labl3 = QLabel("標簽3")lineEdit3 = QLineEdit()fromlayout.addRow(labl1, lineEdit1)fromlayout.addRow(labl2, lineEdit2)fromlayout.addRow(labl3, lineEdit3)self.setLayout(fromlayout) if __name__ == "__main__": app = QApplication(sys.argv) form = Winform()form.show()sys.exit(app.exec_())五.嵌套布局
嵌套布局,是指將 PyQt5 的各種布局綜合起來使用,不在單獨使用某種布局。主要方法有往布局中添加布局和往控件中添加布局。
1.在布局中添加其他布局
將使用的多種布局中,選擇某一個或更多作為全局布局,其余作為該全局布局的子布局。
2.在控件中添加布局
不同于上一種方式中,四種布局需要四種空白控件,這一種方式可以做到無論有多少中布局方式,只需要一個空白控件。
六.QSplitter
QSPlitter,可以動態地拖動子控件之間的邊界,可算是動態的布局管理器。
QSplitter 對象中各子控件默認是橫向布局。
| addWidget() | 將小控件添加到 QSplitter 管理器的布局中 |
| indexOf() | 返回小控件在 QSplitter 管理器中的索引 |
| insertWidget() | 根據指定的索引將一個控件插入到 QSplitter 管理器中 |
| setOrienation() | 設置布局方向:Qt.Horizontal,水平方向;Qt.Vertical,垂直方向 |
| setSize() | 設置控件的初始化大小 |
| count() | 返回小控件在 QSplitter 管理器中的數量 |
電氣專業的計算機萌新,寫博文不容易。如果你覺得本文對你有用,請點個贊支持下,謝謝。
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的pyqt5讲解10:布局管理讲解大全的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql数据库入门教程(13):存储过
- 下一篇: 橙黄橘绿时曾以萧萧梧叶送寒声等于多少?