日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

pyqt5讲解10:布局管理讲解大全

發布時間:2024/9/30 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 pyqt5讲解10:布局管理讲解大全 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一.絕對布局

使用move(x,y)的方法。
絕對布局:
如果改變屏膜的大小,控件的位置不會發生變化,
不同 屏膜顯示有區別

# -*- coding: utf-8 -*-'''【簡介】PyQT5中Absolute positioning(絕對定位)例子'''import sys from PyQt5.QtWidgets import QWidget, QLabel, QApplication class Example(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): lbl1 = QLabel('歡迎', self) lbl1.move(15, 10) lbl2 = QLabel('學習', self) lbl2.move(35, 40) lbl3 = QLabel('PyQt5 !', self) lbl3.move(55, 70) self.setGeometry(300, 300, 320, 120) self.setWindowTitle('絕對位置布局例子') if __name__ == '__main__': app = QApplication(sys.argv) demo = Example() demo.show()sys.exit(app.exec_())

二.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垂直布局
算例

# -*- coding: utf-8 -*-"""【簡介】垂直布局管理例子"""import sys from PyQt5.QtWidgets import QApplication ,QWidget ,QVBoxLayout , QPushButtonclass Winform(QWidget):def __init__(self,parent=None):super(Winform,self).__init__(parent)self.setWindowTitle("垂直布局管理例子") self.resize(330, 150) # 垂直布局按照從上到下的順序進行添加按鈕部件。vlayout = QVBoxLayout()vlayout.addWidget( QPushButton(str(1)))vlayout.addWidget( QPushButton(str(2)))vlayout.addWidget( QPushButton(str(3)))vlayout.addWidget( QPushButton(str(4)))vlayout.addWidget( QPushButton(str(5)))self.setLayout(vlayout) if __name__ == "__main__": app = QApplication(sys.argv) form = Winform()form.show()sys.exit(app.exec_())

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

跨越行列式單元網格
除了一個網格一個控件,還可以一個控件占據多個行列。

# -*- coding: utf-8 -*-"""【簡介】網格布局管理例子"""import sys from PyQt5.QtWidgets import (QWidget, QLabel, QLineEdit, QTextEdit, QGridLayout, QApplication) class Winform(QWidget):def __init__(self,parent=None):super(Winform,self).__init__(parent)self.initUI()def initUI(self): titleLabel = QLabel('標題') authorLabel = QLabel('提交人') contentLabel = QLabel('申告內容') titleEdit = QLineEdit() authorEdit = QLineEdit() contentEdit = QTextEdit() grid = QGridLayout() grid.setSpacing(10) grid.addWidget(titleLabel, 1, 0) grid.addWidget(titleEdit, 1, 1) grid.addWidget(authorLabel, 2, 0) grid.addWidget(authorEdit, 2, 1) grid.addWidget(contentLabel, 3, 0) grid.addWidget(contentEdit, 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_())

四.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.在布局中添加其他布局
將使用的多種布局中,選擇某一個或更多作為全局布局,其余作為該全局布局的子布局。

# -*- coding: utf-8 -*-"""【簡介】嵌套布局"""import sys from PyQt5.QtWidgets import QApplication ,QWidget , QHBoxLayout, QVBoxLayout, QGridLayout , QFormLayout, QPushButton class MyWindow( QWidget): def __init__(self): super().__init__()self.setWindowTitle('嵌套布局示例')# 全局布局(1個):水平wlayout = QHBoxLayout() # 局部布局(4個):水平、豎直、網格、表單hlayout = QHBoxLayout()vlayout = QVBoxLayout()glayout = QGridLayout()formlayout = QFormLayout()# 局部布局添加部件(例如:按鈕)hlayout.addWidget( QPushButton(str(1)) ) hlayout.addWidget( QPushButton(str(2)) )vlayout.addWidget( QPushButton(str(3)) )vlayout.addWidget( QPushButton(str(4)) )glayout.addWidget( QPushButton(str(5)) , 0, 0 )glayout.addWidget( QPushButton(str(6)) , 0, 1 )glayout.addWidget( QPushButton(str(7)) , 1, 0)glayout.addWidget( QPushButton(str(8)) , 1, 1)formlayout.addWidget( QPushButton(str(9)) )formlayout.addWidget( QPushButton(str(10)) )formlayout.addWidget( QPushButton(str(11)) )formlayout.addWidget( QPushButton(str(12)) )# 準備四個部件hwg = QWidget() vwg = QWidget()gwg = QWidget()fwg = QWidget()# 四個部件設置局部布局hwg.setLayout(hlayout) vwg.setLayout(vlayout)gwg.setLayout(glayout)fwg.setLayout(formlayout)# 四個部件加至全局布局wlayout.addWidget(hwg)wlayout.addWidget(vwg)wlayout.addWidget(gwg)wlayout.addWidget(fwg)# 窗體本體設置全局布局self.setLayout(wlayout) if __name__=="__main__": app = QApplication(sys.argv) win = MyWindow() win.show() sys.exit(app.exec_())

2.在控件中添加布局
不同于上一種方式中,四種布局需要四種空白控件,這一種方式可以做到無論有多少中布局方式,只需要一個空白控件。

# -*- coding: utf-8 -*-"""【簡介】嵌套布局"""from PyQt5.QtWidgets import * import sys class MyWindow(QWidget): def __init__(self): super().__init__()self.setWindowTitle('嵌套布局示例')self.resize(700, 200)# 全局部件(注意參數 self),用于"承載"全局布局wwg = QWidget(self)# 全局布局(注意參數 wwg)wl = QHBoxLayout(wwg)hlayout = QHBoxLayout()vlayout = QVBoxLayout()glayout = QGridLayout()formlayout = QFormLayout()# 局部布局添加部件(例如:按鈕)hlayout.addWidget( QPushButton(str(1)) )hlayout.addWidget( QPushButton(str(2)) )vlayout.addWidget( QPushButton(str(3)) )vlayout.addWidget( QPushButton(str(4)) )glayout.addWidget( QPushButton(str(5)) , 0, 0 )glayout.addWidget( QPushButton(str(6)) , 0, 1 )glayout.addWidget( QPushButton(str(7)) , 1, 0)glayout.addWidget( QPushButton(str(8)) , 1, 1)formlayout.addWidget( QPushButton(str(9)) )formlayout.addWidget( QPushButton(str(10)) )formlayout.addWidget( QPushButton(str(11)) )formlayout.addWidget( QPushButton(str(12)) )# 這里向局部布局內添加部件,將他加到全局布局wl.addLayout(hlayout) wl.addLayout(vlayout)wl.addLayout(glayout)wl.addLayout(formlayout) if __name__=="__main__": app = QApplication(sys.argv) win = MyWindow() win.show() sys.exit(app.exec_())

六.QSplitter

QSPlitter,可以動態地拖動子控件之間的邊界,可算是動態的布局管理器。
QSplitter 對象中各子控件默認是橫向布局。

方法描述
addWidget()將小控件添加到 QSplitter 管理器的布局中
indexOf()返回小控件在 QSplitter 管理器中的索引
insertWidget()根據指定的索引將一個控件插入到 QSplitter 管理器中
setOrienation()設置布局方向:Qt.Horizontal,水平方向;Qt.Vertical,垂直方向
setSize()設置控件的初始化大小
count()返回小控件在 QSplitter 管理器中的數量
import sys from PyQt5.QtCore import * from PyQt5.QtGui import * from PyQt5.QtWidgets import *class SplitterExample(QWidget):def __init__(self):super(SplitterExample, self).__init__()self.initUI()def initUI(self): hbox = QHBoxLayout(self)self.setWindowTitle('QSplitter 例子')self.setGeometry(300, 300, 300, 200) topleft = QFrame()topleft.setFrameShape(QFrame.StyledPanel)bottom = QFrame()bottom.setFrameShape(QFrame.StyledPanel)splitter1 = QSplitter(Qt.Horizontal)textedit = QTextEdit()splitter1.addWidget(topleft)splitter1.addWidget(textedit)splitter1.setSizes([100,200])splitter2 = QSplitter(Qt.Vertical)splitter2.addWidget(splitter1)splitter2.addWidget(bottom)hbox.addWidget(splitter2)self.setLayout(hbox)if __name__ == '__main__':app = QApplication(sys.argv)demo = SplitterExample()demo.show()sys.exit(app.exec_())

電氣專業的計算機萌新,寫博文不容易。如果你覺得本文對你有用,請點個贊支持下,謝謝。

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的pyqt5讲解10:布局管理讲解大全的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。