0

過去数日間、私はウィジェットの動きの問題を解決しようとしていました。ある時点で、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()

[Create Node View] > [Show Node Editor] > [Test] ボタンをクリックすると、新しい GroupBox が表示されるはずですが、機能しません。理由がわからない。

4

1 に答える 1

0

そのため、 QGraphicsWidget() の使用をやめ、代わりに QGraphicsRectItem(ecs など) を使用するだけで、すべてが期待どおりに機能し始めました。

于 2016-09-17T22:14:12.640 に答える