Макет внутри QScrollArea внутри макетаPython

Программы на Python
Ответить
Anonymous
 Макет внутри QScrollArea внутри макета

Сообщение Anonymous »

Я хочу создать прокручиваемый QVBoxLayout внутри другого QVBoxLayout. Мой план состоит в том, чтобы иметь такую иерархию:
  • QMainWindow
  • QWidget
  • QVBoxLayout
  • QWidget с вызовом QScrollArea.setWidget()
  • QVBoxLayout
Вот минимальный воспроизводимый пример:

Код: Выделить всё

import sys

from PySide6.QtCore import Qt
from PySide6.QtWidgets import (
QApplication,
QLabel,
QMainWindow,
QScrollArea,
QVBoxLayout,
QWidget,
)

class MainWindow(QMainWindow):
def __init__(self) -> None:
super().__init__()

self.widget = QWidget(self)
self.setCentralWidget(self.widget)

self.vbox_outer = QVBoxLayout()
self.widget.setLayout(self.vbox_outer)
self.vbox_outer.addWidget(QLabel("TOP"))

self.scroll_area = QScrollArea(self.widget)
self.scroll_area.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
self.scroll_area.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
self.scroll_area.setWidgetResizable(True)
self.vertical_layout_widget = QWidget(self.scroll_area)
self.scroll_area.setWidget(self.vertical_layout_widget)

self.vbox_inner = QVBoxLayout()
self.vertical_layout_widget.setLayout(self.vbox_inner)
self.vbox_outer.addWidget(self.vertical_layout_widget)

for _i in range(1, 50):
obj = QLabel("TextLabel", self.vertical_layout_widget)
self.vbox_inner.addWidget(obj)
self.vbox_outer.addWidget(QLabel("BOTTOM"))

self.setGeometry(0, 0, 1000, 500)
self.show()

app = QApplication(sys.argv)
main = MainWindow()
sys.exit(app.exec())
Я могу приблизиться к тому, что хочу, если QScrollArea содержит не QVBoxLayout, а строку с множеством строк, или если центральным виджетом является сам QScrollArea. Эти вопросы похожи, но настолько разные, что у меня ничего не получается: 1 2

Подробнее здесь: https://stackoverflow.com/questions/798 ... ide-layout
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»