【python/pyside2】向QVBoxLayout添加滾動條


import sys
from PySide2.QtWidgets import *
from PySide2.QtGui import QFont
from PySide2 import QtCore

font = QFont()
font.setPointSize(20)


class NewButton(QPushButton):
    def __init__(self, *args):
        super().__init__(*args)
        self.setFont(font)


class Form(QDialog):
    def __init__(self, parent=None):
        super(Form, self).__init__(parent)

        self.v1 = QVBoxLayout()
        self.v2 = QVBoxLayout()


        self.v2.b1 = NewButton("按鈕1")
        self.v2.b2 = NewButton("按鈕2")
        self.v2.b1.clicked.connect(self.additem)
        self.v2.addWidget(self.v2.b1)
        self.v2.addWidget(self.v2.b2)
        self.additem()
        w = QWidget()
        w.setLayout(self.v1)
        area = QScrollArea()
        area.setWidget(w)
        # area.setLayout(self.v1)
        area.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn)
        # area.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn)
        area.setWidgetResizable(True)


        layout = QHBoxLayout()
        layout.addWidget(area)
        # layout.addLayout(self.v1)
        layout.addLayout(self.v2)

        self.setLayout(layout)

    def additem(self):
        self.v1.addWidget(NewButton("新的按鈕"))


if __name__ == '__main__':
    app = QApplication(sys.argv)
    form = Form()
    form.show()
    sys.exit(app.exec_())

思路說明

QScrollArea 只要簡單設置就能有滾動條 QScrollArea.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn) 

PS,水平方向有相似的方法,后面的參數不能是bool值,只能是QtCore.Qt.ScrollBarAlwaysOn或者QtCore.Qt.ScrollBarAlwaysOff

但是QScrollArea 不能和Layout一樣addWidget或addLayout。QScrollArea實質還是Widget,只能setWidget或setLayout “掛載”上一個其他東西。

但實際測試發現,還有一個十分重要的設置QScrollArea.setWidgetResizable(True)必須有,所以代碼是一個QScrollArea先setWidget一個Widget然后Widget再setLayout上QVBoxLayout

我的視頻里面有實際的效果演示

https://www.bilibili.com/video/BV13u411v7hp




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM