Не создаётся ScrollBar в QScrollArea, PyQt

Помогите, пожалуйста, с решением данной задачи.
Требуется следующее:

  1. По кнопке в главном окне должно открываться второе окно.

  2. Во втором окне должна быть QScrollArea с содержимым и Скроллбарами (вертикальным и горизонтальным).

Важно, чтобы второе окно не являлось полностью QScrollArea, а только содержало её внутри себя.

Прикладываю свой код. Подскажите, пожалуйста, как его исправить, чтобы появился скроллбар. Огромное спасибо за ответы!

import sys
 
from PyQt6.QtCore import QSize
from PyQt6.QtWidgets import QApplication, QMainWindow, QPushButton, QWidget, QScrollArea, QLabel
 
 
class Window_303(QWidget):
    def __init__(self):
        super().__init__()
        self.setFixedSize(QSize(500, 500))
        scroll_area = QScrollArea(self)
        dict_303 = {}
        for i in range(0, 50):
            dict_303[f'label_number_{i}'] = QLabel(f'Номер {i}', scroll_area)
            dict_303[f'label_number_{i}'].move(0, 0 + 16 * i)
            dict_303[f'label_number_{i}'].show()
        scroll_area.show()
 
 
class Window(QMainWindow):
    def __init__(self):
        super().__init__()
        self.w = Window_303()
        button = QPushButton("Открыть окно", self)
        button.show()
        button.clicked.connect(self.show_window_303)
        self.show()
 
    def show_window_303(self, checked):
        self.w.show()
 
 
if __name__ == '__main__':
    app = QApplication(sys.argv)
    main_window = Window()
    try:
        sys.exit(app.exec())
    except:
        print("Exiting")

Ответы (2 шт):

Автор решения: S. Nick

Установите свои импорты и попробуйте.

import sys
''' 
from PyQt6.QtCore import QSize
from PyQt6.QtWidgets import QApplication, QMainWindow, QPushButton, \
    QWidget, QScrollArea, QLabel
'''
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.Qt import *
 
 
class Window_303(QWidget):
    def __init__(self):
        super().__init__()
        
# ?      self.setFixedSize(QSize(500, 500))
        self.resize(QSize(500, 500))                                      # +
        
        scroll_area = QScrollArea(self)                                   # 1
        scroll_area.setGeometry(QtCore.QRect(20, 20, 230, 170))           # 2
        scroll_area.setWidgetResizable(True)                              # 3
        self.scrollAreaWidgetContents = QtWidgets.QWidget()               # 4
        layoutV = QVBoxLayout(self.scrollAreaWidgetContents)              # 5      
        scroll_area.setWidget(self.scrollAreaWidgetContents)              # 6      
        
        dict_303 = {}
        for i in range(0, 50):
#            dict_303[f'label_number_{i}'] = QLabel(f'Номер {i}', scroll_area)
            dict_303[f'label_number_{i}'] = QLabel(f'Номер {i}')         # 7

#            dict_303[f'label_number_{i}'].move(0, 0 + 16 * i)
#            dict_303[f'label_number_{i}'].show()
#        scroll_area.show()
            layoutV.addWidget(dict_303[f'label_number_{i}'])              # 8

        dict_303[f'label_number_{i}'].setText(
            dict_303[f'label_number_{i}'].text() + 
                ' Это последняя строка и она длиннее других.')
 
 
class Window(QMainWindow):
    def __init__(self):
        super().__init__()

        self.centralWidget = QtWidgets.QWidget(self)
        self.setCentralWidget(self.centralWidget)  
        
        self.w = Window_303()
        
        self.button = QPushButton("Открыть окно", self)
        self.button.show()
        self.button.clicked.connect(self.show_window_303)
        
        main_layout = QVBoxLayout(self.centralWidget)
        main_layout.addWidget(self.button, alignment=Qt.AlignHCenter | Qt.AlignBottom)
        
#        self.show()
 
    def show_window_303(self, checked):
        self.w.show()
 
 
if __name__ == '__main__':
    app = QApplication(sys.argv)
    main_window = Window()
    main_window.resize(200, 500)
    main_window.show()
    sys.exit(app.exec())

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

→ Ссылка
Автор решения: Альберт

Для решения задачи изменил в своём коде следующий блок:

class Window_303(QWidget):
    def __init__(self, parent=None):
        super(Window_303, self).__init__(parent)
 
        self.setFixedSize(600, 600)
        scroll_area = QScrollArea(self)
        scroll_area.setGeometry(0, 0, 420, 180)
        scroll_area.setWidgetResizable(False)
 
        container = QWidget()
        scroll_area.setWidget(container)
        dict_303 = {}
        geometry = QRect(10, 10, 0, 0)
        for i in range(0, 50):
            dict_303[f'label_number_{i}'] = QLabel(f'Номер {i}', container)
            dict_303[f'label_number_{i}'].adjustSize()
            dict_303[f'label_number_{i}'].move(geometry.bottomLeft())
            geometry |= dict_303[f'label_number_{i}'].geometry()
 
        geometry.setTopLeft(QPoint(0, 0))
        container.resize(geometry.size())
→ Ссылка