Добавление QScrollArea в QTabWidget

Я пытаюсь добавить область прокрутки в QTabWideget.
На данный момент я настроил ее с двумя разными вкладками, и scrollArea добавляется на вторую вкладку.
Когда я запускаю свою программу, элементы добавлен в scrollArea, и полоса прокрутки видна (политика всегда показывает), но она неактивна.

Код:

class MyTableWidget(QWidget):         
    def __init__(self, parent):   
        super(QWidget, self).__init__(parent)
        self.layout = QVBoxLayout(self)

        # Initialize tab screen
        self.tabs = QTabWidget()
        self.tab1 = QWidget()   
        self.tab2 = QScrollArea()
        self.tabs.setMaximumWidth(300)
        self.tabs.setMaximumHeight(100)

        # Add tabs
        self.tabs.addTab(self.tab1,"Tab 1")
        self.tabs.addTab(self.tab2,"Tab 2")

        # Create first tab
        # ...

        # Create second tab
        self.tab2.layout = QFormLayout(self)
        self.tab2.setWidgetResizable(True)
        self.tab2.setVerticalScrollBar(QScrollBar())
        self.tab2.setVerticalScrollBarPolicy(2)
        self.tab2.setFixedSize(100, 70)

        self.t1 = QLabel('Test1', self)
        self.t2 = QLabel('Test2', self)
        self.t3 = QLabel('Test3', self)
        self.t4 = QLabel('Test4', self)
        self.t5 = QLabel('Test5', self)
        self.t6 = QLabel('Test6', self)
        self.tab2.layout.addRow(self.t1)
        self.tab2.layout.addRow(self.t2)
        self.tab2.layout.addRow(self.t3)
        self.tab2.layout.addRow(self.t4)
        self.tab2.layout.addRow(self.t5)
        self.tab2.layout.addRow(self.t6)
        self.tab2.setLayout(self.tab2.layout)

        # Add tabs to widget        
        self.layout.addWidget(self.tabs)
        self.setLayout(self.layout)  

Код выше выглядит так:

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

Все вместе хлюпали. Я хотел бы иметь возможность прокручивать и добавлять больше данных, не раздавливая то, что уже есть.

Кроме того, могу ли я сделать так, чтобы область прокрутки имела тот же фон, что и на картинке ниже?

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


person user45706    schedule 30.05.2018    source источник


Ответы (1)


Вам не нужно заменять макет QScrollArea, но добавьте новый виджет с QFormLayout, как показано ниже.

from PyQt5.QtWidgets import QWidget, QVBoxLayout, QApplication, \
    QTabWidget, QScrollArea, QFormLayout, QLabel


class MyTableWidget(QWidget):

    def __init__(self, parent=None):
        super(QWidget, self).__init__(parent)
        self.layout = QVBoxLayout(self)

        self.tabs = QTabWidget()
        self.tab1 = QWidget()
        self.tab2 = QScrollArea()

        self.tabs.addTab(self.tab1, 'Tab 1')
        self.tabs.addTab(self.tab2, 'Tab 2')

        content_widget = QWidget()
        self.tab2.setWidget(content_widget)
        flay = QFormLayout(content_widget)
        self.tab2.setWidgetResizable(True)
        self.t1 = QLabel('Test1')
        self.t2 = QLabel('Test2')
        self.t3 = QLabel('Test3')
        self.t4 = QLabel('Test4')
        self.t5 = QLabel('Test5')
        self.t6 = QLabel('Test6')

        flay.addRow(self.t1)
        flay.addRow(self.t2)
        flay.addRow(self.t3)
        flay.addRow(self.t4)
        flay.addRow(self.t5)
        flay.addRow(self.t6)

        self.layout.addWidget(self.tabs)
        self.resize(300, 100)


if __name__ == '__main__':
    import sys
    app = QApplication(sys.argv)
    w = MyTableWidget()
    w.show()
    sys.exit(app.exec_())

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

person eyllanesc    schedule 30.05.2018