如何在“QMainWindow”中滚动

问题描述 投票:0回答:1

我刚刚开始学习/使用 PyQt,并且在寻找如何向这个简单程序添加滚动条时遇到一些问题:

class Window(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setGeometry(300,300,180,100)

        self.button1= QPushButton(self)
        self.button1.setText("Button 1")
        self.button1.move(10,10)

        self.button2= QPushButton(self)
        self.button2.setText("Button 2")
        self.button2.move(150,10)

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

本质上,窗口有一个固定的大小(这里是 180x100),但有超出该大小的元素(即,button2 的范围从 150 到 220,这使得它有一半在 180px 窗口之外)

单击并拖动窗口放大显示整个按钮2,这很好,但我需要一种方法来保持窗口的大小,并且只有一个滚动条来查看所有看不见的项目。

python python-3.x pyqt pyqt5
1个回答
1
投票

QScrollArea
类提供了另一个小部件的滚动视图。 更多... https://doc.qt.io/qt-5/qscrollarea.html

滚动区域用于显示框架内子部件的内容。 如果小部件超出框架的大小,视图可以提供滚动条,以便 可以查看子部件的整个区域。 子部件必须用

setWidget()
指定。

import sys
from PyQt5.Qt import *


class Window(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setGeometry(300, 300, 180, 100)

        self.scroll = QScrollArea()          
        self.widget = QWidget() 
        self.widget.resize(280, 200) 
        self.scroll.setWidget(self.widget)
        
        self.button1= QPushButton(self.widget)
        self.button1.setText("Button 1")
        self.button1.move(10, 10)

        self.button2= QPushButton(self.widget)
        self.button2.setText("Button 2")
        self.button2.move(150, 10)        
        
        self.setCentralWidget(self.scroll)
       

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

© www.soinside.com 2019 - 2024. All rights reserved.