QStackedLayout 中的 QScroll 区域

QScroll area within QStackedLayout

我有一个 QMainWindow 和一个 QStackedWidget 作为中心小部件,并且通过更改这个中心小部件的当前小部件在布局之间切换。

这一直工作正常,但现在我试图使这些可能的布局之一可滚动,结果如下:


主窗口代码class:

class MainWindow(QtGui.QMainWindow):
def __init__(self, parent=None):
    super(MainWindow, self).__init__(parent)
    self.central_widget = QtGui.QStackedWidget()
    self.setCentralWidget(self.central_widget)        

    #-- On load open main menu
    self.showMenu()  

# Go to the menu screen
def showMenu(self):
    widget_menu = WidgetMain(self)
    widget_menu.btnConfigu.clicked.connect(self.showConfig)
    self.central_widget.addWidget(widget_menu)
    self.central_widget.setCurrentWidget(widget_menu)
    self.resize(420,350)

# Go to the config screen
def showConfigu(self):
    widget_configu = WidgetOptions(self)
    self.central_widget.addWidget(widget_configu)
    self.central_widget.setCurrentWidget(widget_configu)

WidgetOptions 代码class:

class WidgetOptions(QtGui.QWidget):

def __init__(self, parent=None):
    super(WidgetOptions, self).__init__(parent)

    #Container Widget        
    widget = QtGui.QWidget()
    layoutRightContainer = QtGui.QVBoxLayout()
    for _ in range(11):
        btn = QtGui.QPushButton("test")
        layoutRightContainer.addWidget(btn)
    widget.setLayout(layoutRightContainer)   
    widget
    self.setFixedHeight(300)             

    #Scroll Area Properties
    scroll = QtGui.QScrollArea()
    scroll.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn)
    scroll.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
    scroll.setWidgetResizable(True)
    scroll.setWidget(widget)        

    layoutMain = QtGui.QHBoxLayout()
    layoutMain.addWidget(widget)

我尝试过多次调整设置大小,并制作不同的容器 non-/resizable。在 StackedWidget 之外工作的东西似乎在 StackedWidget 内部不起作用。在这种情况下,似乎也没有关于 SO 的任何问题。 self.setLayout(主要布局)

我通过使 WidgetOptions class 本身成为 QScrollArea 的扩展而不是包含 QScrollArea

的 QWidget 来解决这个问题

WidgetOptions 代码 class:

class WidgetOptions(QtGui.QScrollArea):

def __init__(self, parent=None):
    super(WidgetOptions, self).__init__(parent)

    layoutLeft = QtGui.QVBoxLayout()                
    self.btnVariables = QtGui.QPushButton("Variables")
    self.btnGroups = QtGui.QPushButton("Groups")
    layoutLeft.addWidget(self.btnVariables)
    layoutLeft.addWidget(self.btnGroups)

    #Container Widget        
    widget = QtGui.QWidget()
    layoutRightContainer = QtGui.QVBoxLayout()
    for _ in range(11):
        btn = QtGui.QPushButton("test")
        layoutRightContainer.addWidget(btn)
    widget.setLayout(layoutRightContainer)   

    #Scroll Area Properties
    self.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn)
    self.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
    self.setWidgetResizable(True)
    self.setWidget(widget)        

    self.setWidget(widget)