2016-09-17 50 views
0

對於過去的幾天裏,我試圖解決小部件運動的問題。在某些時候,我嘗試用鼠標信號重寫QComboBox類,但沒有奏效。作爲一個工作,我周圍定居養育我的窗口小部件,QGraphicsWidget但一旦我嘗試添加它不會顯示任何更多的其他項目,我不知道該怎麼做。下面是完整的測試腳本:的QGraphicsView +現場+ 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,不ANY1知道如何從GROUPBOX通過拖動事件父視圖中拖動不起作用? – Dariusz