无法让QMainWindow滚动

时间:2011-01-14 12:23:31

标签: python qt user-interface pyqt

一个最小的例子:

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是带有VBoxLayout的QFrame,可以扩展为任意数量的条目。

在上面发布的代码中,如果表单中的条目不适合窗口,则窗口本身会增长。我更喜欢窗口变得可滚动。我也试过以下......

替换

    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)

导致mainwidget(由表单组成)在窗口的左上角被压缩,在其右侧和底部留下大的空白区域,但仍然不可滚动。

我无法对窗口大小设置限制,因为我希望它可以调整大小。

如何使此窗口可滚动?

2 个答案:

答案 0 :(得分:1)

通过...完成

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

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

self.setCentralWidget(scrollWidget)

答案 1 :(得分:0)

我建议将表单直接设置为滚动区域的小部件:

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

self.setCentralWidget(scrollWidget)

如果这不起作用,请参考第三个示例,但将小部件的扩展策略设置为扩展或最小扩展。