我在布局PyQt窗口时遇到问题。我使用了一个带有一个大QGLWidget的网格布局,下面有许多较小的控制组件。使用以下代码对QGLWidget进行子类化时:
class GLWidget(QtOpenGL.QGLWidget):
def __init__(self, parent=None):
self.parent = parent
QtOpenGL.QGLWidget.__init__(self, parent)
sizePol=QSizePolicy(QtGui.QSizePolicy.Preferred,QtGui.QSizePolicy.Preferred)
sizePol.setWidthForHeight(True)
self.setSizePolicy(sizePol)
def sizeHint(self):
return QSize(300,450)
def widthForHeight(self,height):
return int(height/1.5)
我使用以下代码创建lyout:
class MainWidget(QtGui.QWidget):
def __init__(self, parent = None):
super(MainWidget, self).__init__(parent)
self.ogl_widget = GLWidget(self)
grid = QtGui.QGridLayout()
grid.setSizeConstraint(QtGui.QLayout.SetMinimumSize)
grid.addWidget(self.ogl_widget, 0,0,1,6)
#add other control components
<add LineEdits and Labels>
<their size policy is vertical: fixed, horizontal: expanding>
但是,QGLWidget的大小没有变化。它总是用所产生的任意宽高比填充剩余空间。我需要添加/更改什么才能解决此问题?
答案 0 :(得分:0)
经过一些测试后,我找到了解决方案:
首先,widthForHeight
完全没有调用heightForWidth
,因此我更改了实现heightForWidth
并设置sizePol.setHeightForWidth(True)
。
第二点是,如果没有足够的空间,网格布局会覆盖首选高度。在我的用例中,我可以将QGLWidget放在QScrollArea中,宽高比是正确的。