一个MainWindow中有多个QGraphicsViews和QGraphicsScenes

时间:2019-03-04 20:14:57

标签: python pyside qgraphicsview qgraphicsscene

我正在寻找一个Qt应用程序,其主/父窗口小部件能够“保存”一个或多个“特殊”窗口小部件。每个特殊小部件都显示一个单独的QGraphicsView和QGraphicsScene。

据我所知,只能有一个中央窗口小部件可以设置图形视图,即QMainWindow::setCentralWidget( QGraphicsView ),而我希望有多个图形视图。

这是我失败的快速而肮脏的尝试(在PySide中)

#!/usr/bin/python

from PySide import QtGui
import sys

class MyApp(QtGui.QMainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)
        layout = QtGui.QHBoxLayout()

        self.scene1 = QtGui.QGraphicsScene(self)
        self.scene1.addRect(5,5,200,200)
        self.view1 = QtGui.QGraphicsView(self.scene1, self)

        self.scene2 = QtGui.QGraphicsScene(self)
        self.scene2.addLine(500,500,300,300)
        self.view2 = QtGui.QGraphicsView(self.scene1, self)

        layout.addWidget(self.view1)
        layout.addWidget(self.view2)

        self.setLayout(layout)
        self.show()

if __name__=="__main__":
    app=QtGui.QApplication(sys.argv)
    myapp = MyApp()
    sys.exit(app.exec_())

1 个答案:

答案 0 :(得分:1)

QMainWindow具有默认布局,您无需设置它。在Qt中,可以将QWidget用作容器,因此我们创建一个小部件,该小部件将成为QGraphicsViews的容器以及Centralwidget:

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

        self.scene1 = QtGui.QGraphicsScene(self)
        self.scene1.addRect(5,5,200,200)
        self.view1 = QtGui.QGraphicsView(self.scene1)

        self.scene2 = QtGui.QGraphicsScene(self)
        self.scene2.addLine(500,500,300,300)
        self.view2 = QtGui.QGraphicsView(self.scene2)

        central_widget = QtGui.QWidget()
        layout = QtGui.QHBoxLayout(central_widget)
        layout.addWidget(self.view1)
        layout.addWidget(self.view2)
        self.setCentralWidget(central_widget)
        self.show()

enter image description here