簡體   English   中英

PyQt5 添加滾動條到 main window

[英]PyQt5 add a scrollbar to main window

我知道已經有很多關於這個主題的話題,我試圖遵循他們的建議,但我仍然很難做到這一點。

這是我的初始代碼 window:

from PyQt5.QtWidgets import *
import sys

class Window(QMainWindow):
    def __init__(self):
        super().__init__()

        self.setWindowTitle("Python ")
        self.setGeometry(100, 100, 600, 400)
        self.UiComponents()
        self.show()

    def UiComponents(self):
        emphysemaLabel = QLabel("EMPHYSEMA", self)
        emphysemaLabel.move(10, 10)

        ggoLabel = QLabel("GGO", self)
        ggoLabel.move(10, 300)

        condensLabel = QLabel("Condens", self)
        condensLabel.move(10, 590)

        emphysema_graph_lin = QLabel(self)
        emphysema_graph_lin.resize(302, 232)
        emphysema_graph_lin.move(10, 50)
        emphysema_graph_lin.setStyleSheet("background-color:yellow;")

        ggo_graph_lin = QLabel(self)
        ggo_graph_lin.resize(302, 232)
        ggo_graph_lin.move(10, 340)
        ggo_graph_lin.setStyleSheet("background-color:yellow;")

        condens_graph_lin = QLabel(self)
        condens_graph_lin.resize(302, 232)
        condens_graph_lin.move(10, 630)
        condens_graph_lin.setStyleSheet("background-color:yellow;")

if __name__ == "__main__": 
    App = QApplication(sys.argv)
    window = Window()
    sys.exit(App.exec())

一個例子,如果我發現有用和有效的是在這里找到的代碼https://www.pythonguis.com/tutorials/qscrollarea/

我試圖將它應用到我的代碼中,如下所示:

from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import *
import sys


class Window(QMainWindow):
    def __init__(self):
        super().__init__()

        self.setWindowTitle("Python ")
        self.setGeometry(100, 100, 600, 400)
        self.UiComponents()
        self.show()

    def UiComponents(self):
        self.scroll = QScrollArea()  # Scroll Area which contains the widgets, set as the centralWidget
        self.widget = QWidget()  # Widget that contains the collection of Vertical Box
        self.vbox = QVBoxLayout()  # The Vertical Box that contains the Horizontal Boxes of  labels and buttons

        emphysemaLabel = QLabel("EMPHYSEMA", self)
        emphysemaLabel.move(10, 10)
        self.vbox.addWidget(emphysemaLabel)

        ggoLabel = QLabel("GGO", self)
        ggoLabel.move(10, 300)
        self.vbox.addWidget(ggoLabel)

        condensLabel = QLabel("Condens", self)
        condensLabel.move(10, 590)
        self.vbox.addWidget(condensLabel)

        emphysema_graph_lin = QLabel(self)
        emphysema_graph_lin.resize(302, 232)
        emphysema_graph_lin.move(10, 50)
        emphysema_graph_lin.setStyleSheet("background-color:yellow;")
        self.vbox.addWidget(emphysema_graph_lin)

        ggo_graph_lin = QLabel(self)
        ggo_graph_lin.resize(302, 232)
        ggo_graph_lin.move(10, 340)
        ggo_graph_lin.setStyleSheet("background-color:yellow;")
        self.vbox.addWidget(ggo_graph_lin)

        condens_graph_lin = QLabel(self)
        condens_graph_lin.resize(302, 232)
        condens_graph_lin.move(10, 630)
        condens_graph_lin.setStyleSheet("background-color:yellow;")
        self.vbox.addWidget(condens_graph_lin)

        self.widget.setLayout(self.vbox)

        # Scroll Area Properties
        self.scroll.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
        self.scroll.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
        self.scroll.setWidgetResizable(True)
        self.scroll.setWidget(self.widget)

        self.setCentralWidget(self.scroll)


if __name__ == "__main__":
    App = QApplication(sys.argv)
    window = Window()
    sys.exit(App.exec())

但它不起作用,我該怎么辦? 謝謝你的任何建議。

您可以使用 QVBoxLayout object 的addStretch()方法在布局的末尾添加垂直間隔。並調整最大尺寸以查看滾動效果, setMaximumSize()

from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import *
import sys

class Window(QMainWindow):
    def __init__(self):
        super().__init__()

        self.setWindowTitle("Python ")
        self.setGeometry(100, 100, 600, 400)
        
        # set maximum size of the QMainWindow
        self.setMaximumSize(600, 100)
        self.UiComponents()
        self.show()

    def UiComponents(self):
        self.scroll = QScrollArea()  # Scroll Area which contains the widgets, set as the centralWidget
        self.widget = QWidget()  # Widget that contains the collection of Vertical Box
        self.vbox = QVBoxLayout()  # The Vertical Box that contains the Horizontal Boxes of  labels and buttons

        emphysemaLabel = QLabel("EMPHYSEMA", self)
        emphysemaLabel.move(10, 10)
        self.vbox.addWidget(emphysemaLabel)

        ggoLabel = QLabel("GGO", self)
        ggoLabel.move(10, 300)
        self.vbox.addWidget(ggoLabel)

        condensLabel = QLabel("Condens", self)
        condensLabel.move(10, 590)
        self.vbox.addWidget(condensLabel)

        emphysema_graph_lin = QLabel(self)
        emphysema_graph_lin.resize(302, 232)
        emphysema_graph_lin.move(10, 50)
        emphysema_graph_lin.setStyleSheet("background-color:yellow;")
        self.vbox.addWidget(emphysema_graph_lin)

        ggo_graph_lin = QLabel(self)
        ggo_graph_lin.resize(302, 232)
        ggo_graph_lin.move(10, 340)
        ggo_graph_lin.setStyleSheet("background-color:yellow;")
        self.vbox.addWidget(ggo_graph_lin)

        condens_graph_lin = QLabel(self)
        condens_graph_lin.resize(302, 232)
        condens_graph_lin.move(10, 630)
        condens_graph_lin.setStyleSheet("background-color:yellow;")
        self.vbox.addWidget(condens_graph_lin)
        
        #  add a vertical spacer with addStretch() method
        self.vbox.addStretch()

        self.widget.setLayout(self.vbox)

        # Scroll Area Properties
        self.scroll.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
        self.scroll.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
        self.scroll.setWidgetResizable(True)
        self.scroll.setWidget(self.widget)

        self.setCentralWidget(self.scroll)


if __name__ == "__main__":
    App = QApplication(sys.argv)
    window = Window()
    sys.exit(App.exec())

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM