真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

PyQt5布局管理的示例分析-創(chuàng)新互聯(lián)

這篇文章主要介紹PyQt5布局管理的示例分析,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

創(chuàng)新互聯(lián)公司專注于中大型企業(yè)的成都網(wǎng)站建設(shè)、成都做網(wǎng)站和網(wǎng)站改版、網(wǎng)站營(yíng)銷服務(wù),追求商業(yè)策劃與數(shù)據(jù)分析、創(chuàng)意藝術(shù)與技術(shù)開發(fā)的融合,累計(jì)客戶1000多家,服務(wù)滿意度達(dá)97%。幫助廣大客戶順利對(duì)接上互聯(lián)網(wǎng)浪潮,準(zhǔn)確優(yōu)選出符合自己需要的互聯(lián)網(wǎng)運(yùn)用,我們將一直專注品牌網(wǎng)站設(shè)計(jì)和互聯(lián)網(wǎng)程序開發(fā),在前進(jìn)的路上,與客戶一起成長(zhǎng)!

一、GUI布局管理簡(jiǎn)介

PyQt5中進(jìn)行界面布局管理的方法主要由兩種,一種是絕對(duì)定位,一種是使用布局管理器。Qt中使用絕對(duì)定位的布局方式無法自適應(yīng)窗口的變化,因此Qt中提供了對(duì)界面組件進(jìn)行布局管理的類,用于對(duì)界面組件進(jìn)行管理,能夠自動(dòng)排列窗口中的界面組件,窗口大小變化后自動(dòng)更新界面組件的大小。
PyQt5布局管理的示例分析
QLayout是Qt中布局管理器的抽象基類,通過對(duì)QLayout的繼承,實(shí)現(xiàn)了功能各異且互補(bǔ)的布局管理器。布局管理器不是界面組件,而是界面組件的定位策略;任意容器類型的組件都可以指定布局管理器;同一個(gè)布局管理器管理中的組件擁有相同的父組件,在設(shè)置布局管理器的同時(shí)已經(jīng)隱式指定了父子關(guān)系。
Qt布局管理器的addWidget用于向布局管理器中插入控件,addLayout用于向布局管理器插入子布局管理器。

二、框布局

1、QHBoxLayout

QHBoxLayout提供了水平方式對(duì)控件進(jìn)行布局管理。

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QHBoxLayout, QPushButton, QSizePolicy

class MainWindow(QWidget):

    def __init__(self, parent=None):
        super().__init__(parent)
        self.layout = QHBoxLayout()
        self.layout.setSpacing(20)
        button = QPushButton("Button1")
        button.setMinimumSize(60, 30)
        button.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
        self.layout.addWidget(button)

        button = QPushButton("Button2")
        button.setMinimumSize(60, 30)
        button.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
        self.layout.addWidget(button)

        self.setLayout(self.layout)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.resize(400, 200)
    window.show()

    sys.exit(app.exec_())

2、QVBoxLayout

QVBoxLayout提供了垂直方式對(duì)控件進(jìn)行布局管理。

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton, QSizePolicy

class MainWindow(QWidget):

    def __init__(self, parent=None):
        super().__init__(parent)
        self.layout = QVBoxLayout()
        self.layout.setSpacing(20)
        button = QPushButton("Button1")
        button.setMinimumSize(60, 30)
        button.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
        self.layout.addWidget(button)

        button = QPushButton("Button2")
        button.setMinimumSize(60, 30)
        button.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
        self.layout.addWidget(button)

        self.setLayout(self.layout)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.resize(400, 200)
    window.show()

    sys.exit(app.exec_())

3、嵌套布局

布局管理器可以相互嵌套,形成復(fù)雜的布局管理方式。QBoxLayout布局管理器的嵌套使用實(shí)例如下:
PyQt5布局管理的示例分析

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QHBoxLayout, QPushButton, QSizePolicy

class MainWindow(QWidget):

    def __init__(self, parent=None):
        super().__init__(parent)
        self.layout = QVBoxLayout()
        self.layout.setSpacing(20)
        # 第一行按鈕布局管理
        hLayout1 = QHBoxLayout()
        button = QPushButton("Button1")
        button.setMinimumSize(60, 30)
        button.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
        hLayout1.addWidget(button)
        button = QPushButton("Button2")
        button.setMinimumSize(60, 30)
        button.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
        hLayout1.addWidget(button)
        # 第二行按鈕布局管理
        hLayout2 = QHBoxLayout()
        button = QPushButton("Button1")
        button.setMinimumSize(60, 30)
        button.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
        hLayout2.addWidget(button)
        button = QPushButton("Button2")
        button.setMinimumSize(60, 30)
        button.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
        hLayout2.addWidget(button)
        # 整體垂直布局管理
        self.layout.addLayout(hLayout1)
        self.layout.addLayout(hLayout2)

        self.setLayout(self.layout)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.resize(400, 200)
    window.show()

    sys.exit(app.exec_())

三、網(wǎng)格布局

QGridLayout布局管理器以網(wǎng)格的方式管理界面組件。

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QGridLayout, QPushButton, QSizePolicy

class MainWindow(QWidget):

    def __init__(self, parent=None):
        super().__init__(parent)
        self.layout = QGridLayout()
        self.layout.setSpacing(5)
        button = QPushButton("Button1")
        button.setMinimumSize(60, 30)
        button.setSizePolicy(QSizePolicy.Expanding,QSizePolicy.Expanding)
        self.layout.addWidget(button, 0, 0, 1, 1)

        button = QPushButton("Button2")
        button.setMinimumSize(60, 30)
        button.setSizePolicy(QSizePolicy.Expanding,QSizePolicy.Expanding)
        self.layout.addWidget(button, 0, 1, 1, 1)

        button = QPushButton("Button3")
        button.setMinimumSize(60, 30)
        button.setSizePolicy(QSizePolicy.Expanding,QSizePolicy.Expanding)
        self.layout.addWidget(button, 1, 0, 1, 1)

        button = QPushButton("Button4")
        button.setMinimumSize(60, 30)
        button.setSizePolicy(QSizePolicy.Expanding,QSizePolicy.Expanding)
        self.layout.addWidget(button, 1, 1, 1, 1)

        button = QPushButton("Button5")
        button.setMinimumSize(60, 30)
        button.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
        # 列擴(kuò)展,定位在第2行第1列位置,占1行2列
        self.layout.addWidget(button, 2, 0, 1, 2)

        self.setLayout(self.layout)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.resize(400, 200)
    window.show()

    sys.exit(app.exec_())

四、表單布局

QFormLayout布局管理器使用表單的方式管理界面組件,表單中的標(biāo)簽和組件是相互對(duì)應(yīng)的關(guān)系,支持嵌套使用。
PyQt5布局管理的示例分析

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QFormLayout, QVBoxLayout, QLineEdit
from PyQt5.QtCore import Qt

class MainWindow(QWidget):

    def __init__(self, parent=None):
        super().__init__(parent)
        self.layout = QFormLayout()
        self.layout.setSpacing(20)
        self.layout.setLabelAlignment(Qt.AlignLeft)
        self.layout.setFormAlignment(Qt.AlignRight)
        nameEdit = QLineEdit()
        mailEdit = QLineEdit()
        vLayout = QVBoxLayout()
        vLayout.setSpacing(6)
        addrEdit1 = QLineEdit()
        addrEdit2 = QLineEdit()
        vLayout.addWidget(addrEdit1)
        vLayout.addWidget(addrEdit2)
        self.layout.addRow("Name:", nameEdit)
        self.layout.addRow("Mail:", mailEdit)
        self.layout.addRow("Address:", vLayout)

        self.setLayout(self.layout)
        self.setWindowTitle("FTP")

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.resize(400, 200)
    window.show()

    sys.exit(app.exec_())

PyQt5布局管理的示例分析

五、棧式布局

QStackedLayout棧式布局管理器管理的所有組件在垂直于屏幕的方向上,每次只有一個(gè)界面組件會(huì)顯示在屏幕上,只要最頂層的界面組件會(huì)被顯示。
    QStackedLayout棧式布局管理器的特點(diǎn)如下:
    A、組件大小一致,且充滿父組件的顯示區(qū)
    B、不能直接嵌套其它布局管理器
    C、能夠自由切換需要顯示的組件
    D、每次僅能顯示一個(gè)界面組件
PyQt5布局管理的示例分析

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QStackedLayout, QVBoxLayout, QPushButton

class MainWindow(QWidget):

    def __init__(self, parent=None):
        super().__init__(parent)
        self.layout = QStackedLayout()
        self.layout.addWidget(QPushButton("Button1"))
        self.layout.addWidget(QPushButton("Button2"))
        self.layout.addWidget(QPushButton("Button3"))
        self.layout.addWidget(QPushButton("Button4"))

        self.setLayout(self.layout)
        self.setWindowTitle("Stack Layout")
        # 設(shè)置棧頂顯示第2個(gè)組件
        self.layout.setCurrentIndex(2)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.resize(400, 200)
    window.show()

    sys.exit(app.exec_())

QStackedLayout棧式布局管理器不能直接嵌套其它布局管理器,但可以通過QWidget容器組件間接嵌套使用其它布局管理器。

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QStackedLayout, QVBoxLayout, QPushButton

class MainWindow(QWidget):

    def __init__(self, parent=None):
        super().__init__(parent)
        self.layout = QStackedLayout()
        self.layout.addWidget(QPushButton("Button1"))

        # 容器型組件
        widget = QWidget()
        vLayout = QVBoxLayout()
        vLayout.addWidget(QPushButton("Button2"))
        vLayout.addWidget(QPushButton("Button3"))
        widget.setLayout(vLayout)
        self.layout.addWidget(widget)

        self.layout.addWidget(QPushButton("Button4"))

        self.setLayout(self.layout)
        self.setWindowTitle("Stack Layout")
        # 設(shè)置棧頂顯示第1個(gè)組件
        self.layout.setCurrentIndex(1)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.resize(400, 200)
    window.show()

    sys.exit(app.exec_())

六、分割器

QSplitter是一個(gè)帶切分條(splitter handle)的布局管理器,可以通過setHandleWidth()函數(shù)來設(shè)置切分條的寬帶。QSplitter可以通過setOrientation()函數(shù)來指定分割方向,子組件按加載順序進(jìn)行指定方向排列。

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QTextEdit, QVBoxLayout, QSplitter
from PyQt5.QtCore import Qt

class MainWindow(QWidget):

    def __init__(self, parent=None):
        super().__init__(parent)
        self.layout = QVBoxLayout()
        self.mainSplitter = QSplitter(self)
        self.layout.addWidget(self.mainSplitter)
        self.setLayout(self.layout)
        # 水平線分割
        self.mainSplitter.setOrientation(Qt.Horizontal)

        rightSplitter = QSplitter(self)
        # 垂直線分割
        rightSplitter.setOrientation(Qt.Vertical)
        textEdit = QTextEdit()
        textEdit.setText("Window2")
        rightSplitter.addWidget(textEdit)
        textEdit = QTextEdit()
        textEdit.setText("Window3")
        rightSplitter.addWidget(textEdit)

        textEdit = QTextEdit()
        textEdit.setText("Window1")
        self.mainSplitter.addWidget(textEdit)
        self.mainSplitter.addWidget(rightSplitter)
        # 分割比例
        self.mainSplitter.setStretchFactor(0, 1)
        self.mainSplitter.setStretchFactor(1, 2)

        self.mainSplitter.show()
        self.setWindowTitle("Splitter")

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.resize(400, 200)
    window.show()

    sys.exit(app.exec_())

PyQt5布局管理的示例分析

以上是“PyQt5布局管理的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。


當(dāng)前文章:PyQt5布局管理的示例分析-創(chuàng)新互聯(lián)
鏈接地址:http://weahome.cn/article/djhjch.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部