Как динамически настроить размер QHBoxLayout и QGraphicsView с помощью мыши? (Питон, Pyqt4)

Я изо всех сил пытаюсь найти решение проблемы. Я пытаюсь изменить пространство, выделенное для двух графических изображений в окне. Точнее. У меня есть QHBoxLayout, где я размещаю два QGraphicsView, чтобы что-то в них нарисовать. Эти две сцены расположены рядом (вертикально). Что я хотел бы сделать, так это щелкнуть мышью между двумя сценами, чтобы настроить пространство каждого вида. Если я подниму мышь вверх, то высота верхней сцены уменьшится, а высота нижней сцены увеличится.

К настоящему времени у меня есть следующий код:

# -*- coding: utf-8 -*-
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
from __future__ import unicode_literals

from PyQt4 import QtGui
import sys

class SurfViewer(QtGui.QMainWindow):
    def __init__(self, parent=None):
        super(SurfViewer, self).__init__()

        # General Window
        self.centralWidget = QtGui.QWidget()
        self.setCentralWidget(self.centralWidget)
        self.mainHBOX_param_scene = QtGui.QHBoxLayout()
        # list group view side
        self.plotview = QtGui.QGroupBox("Group of views")
        self.layout_plotview = QtGui.QVBoxLayout()
        # views 
        self.mascenegrid = QtGui.QGraphicsView(self) 
        self.mascenelfp = QtGui.QGraphicsView(self)
        # add widjets
        self.layout_plotview.addWidget(self.mascenegrid)
        self.layout_plotview.addWidget(self.mascenelfp)
        # set layout 
        self.plotview.setLayout(self.layout_plotview)
        self.mainHBOX_param_scene.addWidget(self.plotview)
        self.centralWidget.setLayout(self.mainHBOX_param_scene)


if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    ex = SurfViewer(app) 
    ex.show()
    sys.exit(app.exec_())

Так что я получаю этот результат.

код результата

Что я хотел бы сделать, так это щелкнуть и перетащить серую полосу посередине вверх или вниз в зависимости от того, какой вид требует больше места. Если у кого-то есть решение для этого, это будет хорошо. Хорошего дня!


person ymmx    schedule 05.01.2017    source источник


Ответы (1)


Используйте QSplitter:

    # add widgets
    self.splitter = QtGui.QSplitter(QtCore.Qt.Vertical)
    self.splitter.addWidget(self.mascenegrid)
    self.splitter.addWidget(self.mascenelfp)
    self.layout_plotview.addWidget(self.splitter)
person ekhumoro    schedule 05.01.2017
comment
Красавчик, это именно то, что нужно! - person ymmx; 06.01.2017