2016-01-15 3 views
2

My GLWidget (унаследованный от QtOpenGL.QGLWidget) не отображается на экране, в то время как он должен быть видимым справа от других виджетов. Однако, при переходе из горизонтального расположения:Почему один из моих QtWidgets не появляется?

layout_final = Qtgui.QHBoxLayout() 

к вертикальному:

layout_final = Qtgui.QVBoxLayout() 

мой GL виджет действительно появляется под другими виджетами, но я хочу, чтобы это было на справа от другие виджеты.

class MainWindow(QtGui.QMainWindow): 

    def __init__(self): 
     super(MainWindow, self).__init__() 


     # create layout 
     layout_before_final = QtGui.QVBoxLayout() 
     layout_final = QtGui.QHBoxLayout() 
     layout = QtGui.QGridLayout() 
     layout1 = QtGui.QGridLayout() 
     self.groupBox = QtGui.QGroupBox('Set HDF5 file') 
     self.groupBox1 = QtGui.QGroupBox('Current HDF5 file') 

     # instance widgets 
     # first box 
     self.setH5Button = QtGui.QPushButton('set H5') 
     self.currentH5LineEdit = QtGui.QLineEdit('') 
     layout.addWidget(self.setH5Button, 0,0) 
     layout.addWidget(self.currentH5LineEdit, 0, 1) 
     self.groupBox.setLayout(layout) 

     # second box 
     self.channelsLabel = QtGui.QLabel('Channel') 
     self.channelsComboBox = QtGui.QComboBox() 
     self.levelsLabel = QtGui.QLabel('Level') 
     self.levelsComboBox = QtGui.QComboBox()  


     layout1.addWidget(self.channelsLabel, 0, 0, 1, 1) 
     layout1.addWidget(self.channelsComboBox, 0, 1, 1, 1) 
     layout1.addWidget(self.levelsLabel, 1, 0, 1, 1) 
     layout1.addWidget(self.levelsComboBox, 1, 1, 1, 1) 
     self.groupBox1.setLayout(layout1)   

     # create QWidget to gather the two previous boxes 

     self.widget = QtGui.QWidget() 
     layout_before_final.addWidget(self.groupBox) 
     layout_before_final.addWidget(self.groupBox1) 

     self.widget.setLayout(layout_before_final) 

     # GL widget 
     self.widgetGL = MyWidget() 

     # create a final widget to add the GL widget 
     self.finalWidget = QtGui.QWidget() 
     layout_final.addWidget(self.widgetGL) 
     layout_final.addWidget(self.widget) 

     self.finalWidget.setLayout(layout_final)     


     self.setCentralWidget(self.finalWidget) 

     self.setWindowTitle('PyPractis') 
     self.resize(640, 480)  





def main(): 
    import sys 

    app = QtGui.QApplication(sys.argv) 


    w = MainWindow() 
    w.resize(640, 480) 
    w.show() 
    sys.exit(app.exec_()) 

if __name__ == '__main__': 
    main() 

ответ

1

Я не уверен, почему это происходит, но это, кажется, вызвано виджетом GL преимущественно разрушающийся по горизонтали (отказ от этого пространства для других элементов). Вы можете легко изменить это поведение, однако, указав приоритет растяжения при добавлении элемента:

layout_final.addWidget(self.widgetGL, stretch=1) 

Это приводит к следующему: макет

enter image description here

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