QMainWindow滚动问题

2 投票
2 回答
2142 浏览
提问于 2025-04-16 09:57

这是一个简单的例子:

class MainWindow(QtGui.QMainWindow):
    def __init__(self, parent = None):
    QtGui.QMainWindow.__init__(self, parent)

    winWidth = 683
    winHeight = 784

    screen = QtGui.QDesktopWidget().availableGeometry()
    screenCenterX = (screen.width() - winWidth) / 2
    screenCenterY = (screen.height() - winHeight) / 2
    self.setGeometry(screenCenterX, screenCenterY, winWidth, winHeight)

    layout = QtGui.QVBoxLayout()

    layout.addWidget(FormA())

    mainWidget = QtGui.QWidget()
    mainWidget.setLayout(layout)

    self.setCentralWidget(mainWidget)

FormA 是一个 QFrame,里面有一个可以根据需要扩展的垂直布局(VBoxLayout),可以放入任意数量的条目。

在上面的代码中,如果表单里的条目放不下窗口,窗口就会自动变大。我希望窗口能够滚动,而不是变大。我还尝试了以下方法……

    mainWidget = QtGui.QWidget()
    mainWidget.setLayout(layout)

    self.setCentralWidget(mainWidget)

替换成

    mainWidget = QtGui.QScrollArea()
    mainWidget.setLayout(layout)

    self.setCentralWidget(mainWidget)

结果是,如果条目放不下窗口,表单和条目就会缩小。

再把它替换成

            mainWidget = QtGui.QWidget()
            mainWidget.setLayout(layout)
            scrollWidget = QtGui.QScrollArea()
            scrollWidget.setWidget(mainWidget)

            self.setCentralWidget(scrollWidget)

结果是,主窗口(包含表单的部分)被挤到窗口的左上角,右边和底部留了大块空白,而且还是不能滚动。

我不能限制窗口的大小,因为我希望它可以调整大小。

我该如何让这个窗口可以滚动呢?

2 个回答

0

我建议直接把表单设置为滚动区域的组件:

scrollWidget = QtGui.QScrollArea()
scrollWidget.setWidget(FormA())

self.setCentralWidget(scrollWidget)

如果这样不行,那就用你的第三个例子,但把组件的扩展策略设置为“扩展”或者“最小扩展”。

1

通过以下方式完成...

mainWidget = QtGui.QWidget()
mainWidget.setLayout(layout)

scrollWidget = QtGui.QScrollArea()
scrollWidget.setWidget(mainWidget)
scrollWidget.setWidgetResizable(True) # <---------------

self.setCentralWidget(scrollWidget)

撰写回答