使用 Pyqt6 QScrollArea 创建一个可自动显示滑动条的窗口

一、序言

我是自学Pyqt6的,当然也包括Python。我学Python和Pyqt6的目的是为了实现办公自动化或提升办公效率。但我发现讲Pyqt6 QScrollArea的教程很少,现在我也基本搞明白了。本篇教程将从建立一个主窗口开始,一步步实现使用 Pyqt6 QScrollArea 创建一个可自动显示滑动条的窗口。

二、建立主窗口

# 导入需要的模块
from PyQt6.QtWidgets import QApplication, QMainWindow, QWidget, QScrollArea
from PyQt6 import QtCore
import sys


# 主窗口类
class MainWindow(QMainWindow):
    def __init__(self) -> None:
        super().__init__()
        # 设置主窗口大小
        self.setGeometry(QtCore.QRect(500, 200, 400, 300))
        # 设置主窗口标题
        self.setWindowTitle("实例一")

        # 创建局部变量tempQWidget,将用于主窗口的中央组件
        tempQWidget = QWidget(parent=self)
        # 设置局部变量tempQWidget窗口大小
        tempQWidget.setGeometry(QtCore.QRect(0, 0, 400, 300))
        # 将主窗口的中央组件设置为局部变量tempQWidget
        self.setCentralWidget(tempQWidget)

        # 显示窗口
        self.show()


if __name__ == "__main__":
    App = QApplication(sys.argv)
    mainWindow = MainWindow()
    sys.exit(App.exec())
    

通过上述代码,我们创建了一个继承自QMainWindow类的MainWindow类,这将是我们程序运行的主窗口。具体如何实现的不是本篇的讨论内容,代码中的标注可以帮助你理解。

三、创建QScrollArea

1、QScrollArea的结构

打开Qt Designer并创建一个QScrollArea,在对象检查器中,我们发现,创建了一个QScrollArea(①),它包含一个子物件QWidget(②,一般被命名为scrollAreaWidgetContents)。当scrollAreaWidgetContents的大小大于QScrollArea的大小,会自动显示滑动条。 

2、代码

# 导入需要的模块
from PyQt6.QtWidgets import QApplication, QMainWindow, QWidget, QScrollArea
from PyQt6 import QtCore
import sys


# 主窗口类
class MainWindow(QMainWindow):
    def __init__(self) -> None:
        super().__init__()
        # 设置主窗口大小
        self.setGeometry(QtCore.QRect(500, 200, 400, 300))
        # 设置主窗口标题
        self.setWindowTitle("实例一")

        # 创建局部变量tempQWidget,将用于主窗口的中央组件
        tempQWidget = QWidget(parent=self)
        # 设置局部变量tempQWidget窗口大小
        tempQWidget.setGeometry(QtCore.QRect(0, 0, 400, 300))
        # 将主窗口的中央组件设置为局部变量tempQWidget
        self.setCentralWidget(tempQWidget)
        
        # 从此开始
        
        # 创建scrollArea,设置其父类为主窗口的中央组件
        self.scrollArea = QScrollArea(parent=self.centralWidget())
        # 设置scrollArea大小
        self.scrollArea.setGeometry(QtCore.QRect(-1, -1, 401, 301))
        # 取消scrollArea自动设置大小
        self.scrollArea.setWidgetResizable(False)
        # 创建局部变量tempScrollAreaWidgetContents
        tempScrollAreaWidgetContents = QWidget()
        # 设置tempScrollAreaWidgetContents的scrollAreaWidgetContents的大小
        tempScrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 399, 299))
        # 设置scrollArea的scrollAreaWidgetContents为tempScrollAreaWidgetContents
        self.scrollArea.setWidget(tempScrollAreaWidgetContents)
        
        # 到此结束

        # 显示窗口
        self.show()


if __name__ == "__main__":
    App = QApplication(sys.argv)
    mainWindow = MainWindow()
    sys.exit(App.exec())

*需要添加的代码在中间,从标注的“从此开始”到标注的“到此结束”。

需要注意的是:

        ①:若scrollArea使用的父级窗口的类型是QMainWindow,则scrollArea的父级须设置为 QMainWindow.centralWidget();其他则为一般父级。 

        ②:一定要把scrollArea的WidgetResizable设置为False,即代码self.scrollArea.setWidgetResizable(False),不然scrollArea会自动设置scrollAreaWidgetContents的大小为scrollArea的大小,使其无法正常显示滑动条。

四、实现自动显示滑动条

    # 实现显示滑动条
    def ShowScrollBar(self) -> None:
        self.scrollArea.widget().setGeometry(0, 0, 500, 600)

为我们的MainWindow类添加类方法,如上,即可实现。需要注意的是:需要手动设置ScrollAreaWidgetContents的大小,其可通过scrollArea.widget()方程。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
PyQt6是一个Python语言的GUI编程工具包,QScrollArea是其中一个窗口部件。QScrollArea提供了一个可滚动的视图区域,可以在其中添加其他的窗口部件。当添加的部件的大小超过了QScrollArea的大小时,QScrollArea自动添加滚动来方便用户滚动查看内容。 在PyQt6中,使用QScrollArea时需要先创建一个QScrollArea实例,并将要添加到其中的窗口部件添加到QScrollArea中。需要注意的是,添加到QScrollArea中的窗口部件会被自动调整大小以适应QScrollArea的大小。 以下是一个简单的示例代码: ```python import sys from PyQt6.QtWidgets import QApplication, QWidget, QVBoxLayout, QScrollArea, QLabel app = QApplication(sys.argv) window = QWidget() layout = QVBoxLayout(window) scroll_area = QScrollArea() scroll_area.setWidgetResizable(True) # 设置可自动调整大小 layout.addWidget(scroll_area) content_widget = QWidget(scroll_area) scroll_area.setWidget(content_widget) inner_layout = QVBoxLayout(content_widget) for i in range(100): label = QLabel(f"Label {i}") inner_layout.addWidget(label) window.show() sys.exit(app.exec()) ``` 以上代码创建了一个QWidget,其中包含一个QVBoxLayout布局。QScrollArea被添加到布局中,并设置为可自动调整大小。一个QWidget被创建并添加到QScrollArea中作为滚动区域的内容。在QWidget中,又添加了一个QVBoxLayout布局,并向其中添加了100个QLabel作为滚动区域中的内容。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值