老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

重慶分公司,新征程啟航

為企業(yè)提供網站建設、域名注冊、服務器等服務

PyQt5布局管理的示例分析

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

彌勒ssl適用于網站、小程序/APP、API接口等需要進行數據傳輸應用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯建站的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯系或者加微信:18980820575(備注:SSL證書合作)期待與您的合作!

一、GUI布局管理簡介

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

二、框布局

1、QHBoxLayout

QHBoxLayout提供了水平方式對控件進行布局管理。

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提供了垂直方式對控件進行布局管理。

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、嵌套布局

布局管理器可以相互嵌套,形成復雜的布局管理方式。QBoxLayout布局管理器的嵌套使用實例如下:
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_())

三、網格布局

QGridLayout布局管理器以網格的方式管理界面組件。

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)
        # 列擴展,定位在第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布局管理器使用表單的方式管理界面組件,表單中的標簽和組件是相互對應的關系,支持嵌套使用。
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棧式布局管理器管理的所有組件在垂直于屏幕的方向上,每次只有一個界面組件會顯示在屏幕上,只要最頂層的界面組件會被顯示。
    QStackedLayout棧式布局管理器的特點如下:
    A、組件大小一致,且充滿父組件的顯示區(qū)
    B、不能直接嵌套其它布局管理器
    C、能夠自由切換需要顯示的組件
    D、每次僅能顯示一個界面組件
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")
        # 設置棧頂顯示第2個組件
        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")
        # 設置棧頂顯示第1個組件
        self.layout.setCurrentIndex(1)

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

    sys.exit(app.exec_())

六、分割器

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

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布局管理的示例分析”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注創(chuàng)新互聯行業(yè)資訊頻道!


網頁標題:PyQt5布局管理的示例分析
分享路徑:http://www.xueling.net.cn/article/ggcide.html

其他資訊

在線咨詢
服務熱線
服務熱線:028-86922220
TOP
主站蜘蛛池模板: 欧美激情性a片在线观看不卡 | 久久久久久久国产毛片 | 少妇无码太爽了在线观看免费视频 | 色AV综合AV无码AV网站 | 日韩一区二区三区无码人妻视频 | 成人久久18免费网站 | 一区二区久久精品66国产精品 | 毛片软件大全 | 国产AV旡码专区亚洲AV苍井空 | 精品91久久久| 国产一区二区资源 | 爱爱午夜视频 | 羞羞答答xxdd.tv | 欧美操日韩 | 成年人射精的黄色视频网站 | 国产精品成人永久在线 | 久久精品日韩一区二区三区 | 福利片无码视频一区二区 | 亚洲精品a在线观看 | 年轻母亲4在线 | 亚洲色欲综合一区二区三区 | 亚洲免费av网站 | 国产tv日韩在线观看视频 | 91福利影院在线观看 | 欧美又粗又大色情hd堕落街传奇 | 精品成人免费一区二区不卡 | 麻豆蜜桃九色在线视频 | 一级视频在线观看 | 天堂AV无码大芭蕉伊人AV | 色花av| 激情综合色五月六月婷婷 | 亚洲欧美日韩国产一区二区 | 国产精品爽黄69天堂a | 色婷婷91 | 亚洲人体av| 亚洲Av无码国产精品色午 | 成人无码av片在线观看 | 久久456| 激情国产AV做激情国产爱 | 超碰97在线看 | 抽搐一进一出gif日本 |