Dariusz
Dariusz

Reputation: 1054

QGraphicsview + scene + QGroupBox movement issue

For past few days I was trying to solve the issue of widget movement. At some point I tried rewriting QComboBox classes with mouse signals but that did not work. As a work around I settled for parenting my widget to a QGraphicsWidget but once I try to add another item it does not display any more and I'm not sure what to do. Here is full test script:

from PyQt4 import QtGui,  QtCore
from PyQt4.QtGui import QApplication,QGraphicsItem, QGraphicsView, QGraphicsScene, QDesktopWidget, QCheckBox, QGroupBox, QPushButton, QGridLayout, QLabel, QLineEdit, QComboBox, QFont, QRadioButton, QButtonGroup, QWidget, QShortcut, QKeySequence, QIcon, QListView, QStandardItemModel, QStandardItem, QAction, QIntValidator, QListWidget, QProgressBar, QSpacerItem
from PyQt4.QtCore import QRect
from functools import partial
import sys

class node_GUI(QtGui.QWidget):
    def __init__(self):
        super(node_GUI, self).__init__()



class Main(QtGui.QMainWindow):
    def __init__(self, *args):
        super(Main, self).__init__(*args)#QtGui.QMainWindow.__init__(self)
        self.init_defaults()
    def init_defaults(self):
        self.setGeometry(800,800,500,200)
        self.lay_main = QGridLayout()
        self.centralwidget = QtGui.QWidget()
        self.centralwidget.setLayout(self.lay_main)
        self.setCentralWidget(self.centralwidget)

        btn_create_node = QPushButton("Create Node View")
        btn_create_node.clicked.connect(self.create_node_view)
        self.lay_main.addWidget(btn_create_node)

    def showWindow(self,window):
        window.show()

    def printTest(self):
        print "Start"
        box = QGroupBox("subWidget")
        box_btn = QPushButton("Test")
        box_btn.clicked.connect(self.printTest)
        le_edit = QLineEdit()
        lay = QGridLayout()
        box.setLayout(lay)
        lay.addWidget(box_btn)
        lay.addWidget(le_edit)

        area = QtGui.QGraphicsWidget()
        area.setMinimumSize(QtCore.QSizeF(400,300))
        area.setFlag(QtGui.QGraphicsItem.ItemIsMovable, True)
        area.setFlag(QtGui.QGraphicsItem.ItemIsSelectable, True)

        proxy = self.scene.addWidget(box)
        proxy.setParentItem(area)

        print "END"
    def create_node_view(self):
        print "creting node view"
        window = node_GUI()
        window.setGeometry(QRect(100, 100, 400, 200))
        window.setWindowTitle("node ")
        window.setObjectName("node")
        show_window = QPushButton("Show Node Editor")
        show_window.setObjectName("btn")
        show_window.clicked.connect(partial(self.showWindow,window))
        self.lay_main.addWidget(show_window)

        box = QGroupBox("Widgets")
        box_btn = QPushButton("Test")
        box_btn.clicked.connect(self.printTest)
        le_edit = QLineEdit()
        lay = QGridLayout()
        box.setLayout(lay)
        lay.addWidget(box_btn)
        lay.addWidget(le_edit)

        area = QtGui.QGraphicsWidget()
        area.setMinimumSize(QtCore.QSizeF(300,300))
        area.setFlag(QtGui.QGraphicsItem.ItemIsMovable, True)
        area.setFlag(QtGui.QGraphicsItem.ItemIsSelectable, True)
        area.setAutoFillBackground(True)

        ecs = QtGui.QGraphicsEllipseItem()
        ecs.setRect(QtCore.QRectF(79,79,79,79))
        ecs.setFlag(QtGui.QGraphicsItem.ItemIsMovable, True)
        ecs.setFlag(QtGui.QGraphicsItem.ItemIsSelectable, True)

        view = QGraphicsView()
        self.scene = QGraphicsScene()
        self.scene.addItem(area)
        proxy = self.scene.addWidget(box)
        proxy.setParentItem(area)

        self.scene.addItem(ecs)
        view.setScene(self.scene)

        lay_window = QGridLayout()
        window.setLayout(lay_window)
        lay_window.addWidget(view)


def main():
    app = QtGui.QApplication(sys.argv)
    main = Main()
    main.show()
    sys.exit(app.exec_())


if __name__ == "__main__":
    main()

When you click on Create Node View > Show Node Editor > Test button > a new GroupBox should appear but that does not work. Not sure why.

Upvotes: 1

Views: 187

Answers (1)

Dariusz
Dariusz

Reputation: 1054

Right so I stopped using QGraphicsWidget() and instead I just use QGraphicsRectItem(ecs for example) once I did that change everything started to work as expected.

Upvotes: 1

Related Questions