seit ca. einem halben Jahr beschäftige ich mich mit Python. Ich bin dabei, eine Anwendung mit Qt Gui zu erstellen, in der ein
Graph aufgebaut werde soll. Es werden ItemGroups verwendet. Hier habe ich ein Problem.
Die Group wird korrekt dargestellt und lässt sich verschieben. Wenn ich die Group erneut mit der Maus verschieben möchte, "springt" diese zunächst
an eine andere Position. Hat jemant eine Idee warum das geschieht?
Hier noch der Code:
Code: Alles auswählen
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
import uuid
#from const import values
from PyQt4 import QtGui, QtCore
#from mainwindow import Ui_MainWindow as Dlg
view=None
try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
_fromUtf8 = lambda s: s
class Graphnode(QtGui.QGraphicsItemGroup):
def __init__(self, pos, graphWidget):
super(Graphnode, self).__init__()
self.setFlags(QtGui.QGraphicsItem.ItemIsSelectable|
QtGui.QGraphicsItem.ItemIsMovable |
QtGui.QGraphicsItem.ItemIsFocusable)
self.setSelected(False)
self.setVisible(True)
self.graphWidget=graphWidget
self.rect=self.boundingRect()
self.setPos(pos)
self.textfield=QtGui.QGraphicsTextItem("Text eingeben")
self.textfield.setPos(0,0)
self.textrec= self.textfield.boundingRect()
self.recBox=QtCore.QRectF(0, 0, self.textrec.width(), self.textrec.height())
self.box=QtGui.QGraphicsRectItem()
self.box.setRect(self.recBox)
self.box.style = QtCore.Qt.SolidLine
self.addToGroup(self.textfield)
self.addToGroup(self.box)
def mouseReleaseEvent(self, event):
self.setSelected(False)
self.clearFocus()
def mousePressEvent(self, event):
self.setSelected(True)
self.setFocus()
def mouseDoubleClickEvent(self, event):
textrec=self.textfield.boundingRect()
self.graphWidget.nodedoublicked(self)
textrec=self.textfield.boundingRect()
self.setnewboxsize()
def setnewboxsize(self):
textrec=self.textfield.boundingRect()
self.box.setRect(textrec)
class GraphWidget(QtGui.QGraphicsView):
def __init__(self):
super(GraphWidget, self).__init__()
self.timerId = 0
self.scene = QtGui.QGraphicsScene(self)
self.scene.setSceneRect(-200, -200, 800, 600)
self.setScene(self.scene)
self.setRenderHint(QtGui.QPainter.Antialiasing)
def nodedoublicked(self, node):
node.textfield.setPlainText("kkk\njjj")
def addnode(self):
node=Graphnode(QtCore.QPointF(60, 80), self)
self.scene.addItem(node)
class MainWindow(QtGui.QMainWindow):
wscene=None
wview=None
def __init__(self):
QtGui.QMainWindow.__init__(self)
self.prevPoint = QtCore.QPoint()
self.resize(800, 600)
self.setWindowTitle("Desinger")
self.createMenuBar()
self.graphwidget = GraphWidget()
self.graphwidget.show()
widged= QtGui.QWidget()
layout = QtGui.QVBoxLayout()
layout.addWidget(self.graphwidget)
widged.setLayout(layout)
self.setCentralWidget(widged)
def createMenuBar(self):
exitAction = QtGui.QAction(QtGui.QIcon('exit.png'), 'exit', self)
exitAction.setShortcut('Ctrl+Q')
exitAction.triggered.connect(QtGui.qApp.quit)
newAction = QtGui.QAction(QtGui.QIcon('exit.png'), 'new', self)
newAction.setShortcut('Ctrl+N')
newAction.triggered.connect(self.menuenewGraph)
openAction = QtGui.QAction(QtGui.QIcon('exit.png'), _fromUtf8('open'), self)
openAction.setShortcut('Ctrl+O')
openAction.triggered.connect(self.menueopenGraph)
addRect = QtGui.QAction(QtGui.QIcon('exit.png'), _fromUtf8('Aktion'), self)
addRect.setShortcut('Ctrl+A')
addRect.setStatusTip('Aktion einfügen')
addRect.triggered.connect(self.menueAddRect)
fileMenu = QtGui.QMenuBar()
fileMenuProg = QtGui.QMenu("&Programm", self)
fileMenuProg.addAction(newAction)
fileMenuProg.addAction(openAction)
fileMenuProg.addAction(exitAction)
fileMenu.addMenu(fileMenuProg)
fileMenu.addAction(addRect)
self.setMenuBar(fileMenu)
def menueAddRect(self):
self.graphwidget.addnode()
def menuenewGraph(self):
pass
def menueopenGraph(self):
pass
app = QtGui.QApplication(sys.argv)
dialog = MainWindow()
dialog.show()
sys.exit(app.exec_())