【问题标题】:GridLayout+ScrollArea widget position after size change大小更改后的 GridLayout+ScrollArea 小部件位置
【发布时间】:2012-07-08 21:02:47
【问题描述】:

我有一个滚动区域,里面有一个网格布局,我用图像向它添加了 QLabels。当应用程序启动时,它工作正常并正确显示标签:

注意:我计算了当前布局空间上适合多少标签。

如果我最大化它也可以正常工作:

但是当我点击恢复时,发生了一些奇怪的事情:

您可以看到只添加了 6 个标签(与第一个屏幕截图中相同),但在这里它们都相互重叠。

这是 ScrollArea 和 Layout 的初始化代码:

self.scrollArea = QtGui.QScrollArea(self.centralwidget)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Ignored, QtGui.QSizePolicy.Ignored)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.scrollArea.sizePolicy().hasHeightForWidth())
self.scrollArea.setSizePolicy(sizePolicy)
self.scrollArea.setAutoFillBackground(True)
self.scrollArea.setStyleSheet(_fromUtf8("border: 1px solid blue"))
self.scrollArea.setWidgetResizable(True)
self.scrollArea.setObjectName(_fromUtf8("scrollArea"))
self.gridLayoutWidget = QtGui.QWidget()
self.gridLayoutWidget.setGeometry(QtCore.QRect(0, 0, 667, 551))
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Ignored, QtGui.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.gridLayoutWidget.sizePolicy().hasHeightForWidth())
self.gridLayoutWidget.setSizePolicy(sizePolicy)
self.gridLayoutWidget.setLayoutDirection(QtCore.Qt.LeftToRight)
self.gridLayoutWidget.setAutoFillBackground(True)
self.gridLayoutWidget.setStyleSheet(_fromUtf8("border: 1px solid red"))
self.gridLayoutWidget.setObjectName(_fromUtf8("gridLayoutWidget"))
self.scrollArea.setWidget(self.gridLayoutWidget)

【问题讨论】:

    标签: pyqt pyqt4 qscrollarea qgridlayout


    【解决方案1】:

    感谢 freenode 上的#pyqt(向 Avaris 大喊大叫),我现在知道问题出在哪里。这似乎是 QGridLayout 中的一个错误。

    当我们最大化窗口 QGridLayout 以 12 列结束时,当我们进行恢复时,即使每个项目都被删除,布局仍然假定 12 列,所以在图 3 中它显示 6 个图像,但认为它需要显示 12 个所以它只是与其他的重叠。

    【讨论】:

      猜你喜欢
      • 2014-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-08
      • 1970-01-01
      • 2020-05-12
      相关资源
      最近更新 更多