如何用鼠标动态调整QHBoxLayout和QGraphicsView的大小? (Python, Pyqt4)
How adjust QHBoxLayout and QGraphicsView size dynamically with the mouse ? (Python, Pyqt4)
我正在努力寻找问题的解决方案。
我正在尝试修改分配给 window 中两个图形场景的 space。
准确地说。我有一个 QHBoxLayout,我在其中放置了两个 QGraphicsViews 以在其中绘制一些东西。这两个场景并排(垂直)放置。我想做的是用鼠标在两个场景之间单击以调整每个视图的space。如果我向上移动鼠标,那么上面的场景会变小,下面的场景会变大。
现在我有以下代码:
# -*- 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_())
所以我得到了这个结果。
我想做的是单击中间的灰色条并将其向上或向下拖动,具体取决于哪个视图需要更多 space。
如果有人对此有解决方案,那就太好了。
祝你有美好的一天!
使用 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)
我正在努力寻找问题的解决方案。 我正在尝试修改分配给 window 中两个图形场景的 space。 准确地说。我有一个 QHBoxLayout,我在其中放置了两个 QGraphicsViews 以在其中绘制一些东西。这两个场景并排(垂直)放置。我想做的是用鼠标在两个场景之间单击以调整每个视图的space。如果我向上移动鼠标,那么上面的场景会变小,下面的场景会变大。
现在我有以下代码:
# -*- 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_())
所以我得到了这个结果。
我想做的是单击中间的灰色条并将其向上或向下拖动,具体取决于哪个视图需要更多 space。 如果有人对此有解决方案,那就太好了。 祝你有美好的一天!
使用 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)