QGraphicsview + scene + QGroupBox移动问题

时间:2016-09-17 16:46:53

标签: pyqt qgraphicsview qgroupbox qgraphicswidget

过去几天我试图解决小部件移动的问题。在某些时候,我尝试用鼠标信号重写QComboBox类,但这不起作用。作为一个解决方案,我决定将我的小部件变为QGraphicsWidget,但是一旦我尝试添加另一个项目,它就不再显示了,我不知道该怎么做。这是完整的测试脚本:

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()

单击“创建节点视图”>显示节点编辑器>测试按钮>应该出现一个新的GroupBox,但这不起作用。不知道为什么。

1 个答案:

答案 0 :(得分:0)

是的,所以我停止使用QGraphicsWidget(),而我只是使用QGraphicsRectItem(例如ecs),一旦我做了改变,一切都开始按预期工作。