2016-09-17 2 views
0

私は過去数日間、ウィジェットの動きの問題を解決しようとしていました。ある時点で、マウス信号でQComboBoxクラスを書き直そうとしましたが、うまくいきませんでした。私のウィジェットをQGraphicsWidgetに親子化するために解決したが、別のアイテムを追加しようとすると、これ以上表示されず、何をすべきか分からない。QGraphicsview + scene + QGroupBoxの動きの問題

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

[ノードビューの作成]> [ノードエディタの表示]> [テスト]ボタンをクリックすると、新しいグループボックスが表示されますが動作しません。理由は分かりません。

答えて

0

私はQGraphicsWidget()を使用しなくなりました。代わりに、QGraphicsRectItem(例:ecs)を使用すると、すべての変更が期待どおりに機能するようになりました。

+0

編集のビット。私がgroupBoxでドラッグするとウィジェットのドラッグは機能しませんが、GraphicsItemだけであれば、groupBoxから親にドラッグイベントを渡す方法をany1が知っていますか? – Dariusz

関連する問題