Ich versuche, einen Knoteneditor mit pyqt und Probleme beim Hinzufügen von Knoten in Echtzeit.Knoteneditor, Hinzufügen von Kind QWidget ein anderes QWidget zur Laufzeit
Wenn ich einen Knoten bei der Initialisierung des NodeEditor QWidget hinzufügen, funktioniert es gut, aber wenn ich einen Knoten mit einem Rechtsklick-Menü hinzufügen passiert nichts, irgendeine Idee, was ich falsch mache?
import sys
from PyQt4 import QtCore, QtGui, uic
class Node(QtGui.QWidget):
def __init__(self,parent=None):
QtGui.QWidget.__init__(self,parent)
widLwayout = QtGui.QVBoxLayout()
self.setLayout(widLwayout)
self.frame = QtGui.QFrame()
self.frameLayout = QtGui.QVBoxLayout()
self.frame.setLayout(self.frameLayout)
self.frame.setStyleSheet("background-color: rgb(220, 220, 220)")
widLwayout.addWidget(self.frame)
def mousePressEvent(self, event):
self.__mousePressPos = None
self.__mouseMovePos = None
if event.button() == QtCore.Qt.LeftButton:
self.__mousePressPos = event.globalPos()
self.__mouseMovePos = event.globalPos()
super(Node, self).mousePressEvent(event)
def mouseMoveEvent(self, event):
if event.buttons() == QtCore.Qt.LeftButton:
currPos = self.mapToGlobal(self.pos())
globalPos = event.globalPos()
diff = globalPos - self.__mouseMovePos
newPos = self.mapFromGlobal(currPos + diff)
self.move(newPos)
self.__mouseMovePos = globalPos
super(Node, self).mouseMoveEvent(event)
def mouseReleaseEvent(self, event):
if self.__mousePressPos is not None:
moved = event.globalPos() - self.__mousePressPos
if moved.manhattanLength() > 3:
event.ignore()
return
super(Node, self).mouseReleaseEvent(event)
class Hosts(Node):
def __init__(self, parent=None):
Node.__init__(self,parent)
self.resize(150,100)
title = QtGui.QLabel("Hosts")
getAssigned = QtGui.QRadioButton("Assigned")
getHostNames = QtGui.QRadioButton("Host Names")
getHostNames.setLayoutDirection(QtCore.Qt.RightToLeft)
self.frameLayout.addWidget(title)
self.frameLayout.addWidget(getAssigned)
self.frameLayout.addWidget(getHostNames)
class NodeEditor(QtGui.QWidget):
def __init__(self):
QtGui.QMainWindow.__init__(self)
self.resize(640,480)
self.nodes = []
self.nodes.append(Hosts(self))
self.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
self.customContextMenuRequested.connect(self.contextMenuEvent)
self.buildMenu()
def buildMenu(self):
self.menu = QtGui.QMenu(self)
self.addHosts = QtGui.QAction('Add Hosts', self)
self.addHosts.triggered.connect(self.addHostsTrigger)
self.menu.addAction(self.addHosts)
def contextMenuEvent(self, event):
self.menu.popup(QtGui.QCursor.pos())
def addHostsTrigger(self):
self.nodes.append(Hosts(self))
if __name__=="__main__":
app = QtGui.QApplication(sys.argv)
wnd = NodeEditor()
wnd.show()
sys.exit(app.exec_())
Jede Hilfe wird geschätzt.
Danke, Mark
Dank Eyllanesc, kann es nicht glauben, dass einfach war .. :) – Mark