Как прокручивать в ‘QMainWindow’

#python #python-3.x #pyqt #pyqt5

#python #python-3.x #pyqt #pyqt5

Вопрос:

Я только начинаю изучать / использовать 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_())
 

По сути, окно имеет установленный размер (здесь это 180×100), но имеет элементы за пределами этого размера (т.Е. button2 имеет размеры от 150 до 220, что делает его наполовину за пределами окна 180px)

При перетаскивании окна больше отображается вся кнопка button2, и это нормально, но мне нужен способ сохранить размер окна таким, какой он есть, и просто иметь полосу прокрутки, чтобы увидеть все невидимые элементы.

Ответ №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_())
 

введите описание изображения здесь