2015-12-14 3 views
0

У меня проблема с оформлением окна PyQt. Я использую макет сетки с одним большим QGLWidget и множеством меньших элементов управления под ним. При наследовании QGLWidget я использую следующий код:PyQt 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

После еще нескольких тестов я нашел решение:

Первая точка, что widthForHeight не вызывается на всех, но heightForWidth, поэтому я изменил его реализации heightForWidth вместо и настройки sizePol.setHeightForWidth(True).

Вторая точка заключается в том, что макет сетки переопределяет предпочтительную высоту, если места недостаточно. В моем случае использования я могу просто поместить QGLWidget в QScrollArea, и соотношение сторон правильное.

Смежные вопросы