PyQt5 - 将QScrollArea添加到QTabWidget

时间:2018-05-30 13:50:49

标签: python pyqt pyqt5 qtabwidget qscrollarea

我正在尝试向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)  

上面的代码结果如下:
enter image description here
所有人都挤在一起。我希望能够滚动并添加更多数据,而不会在那里压垮什么。

另外,我可以使滚动区域具有与下图所示相同的背景吗? enter image description here

1 个答案:

答案 0 :(得分:0)

您不必替换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_())

enter image description here