Hallo
Für mein derzeitiges Projekt nutze ich zwei Programme, eine GUI, die ich in Delphi geschrieben hab und ein Programm, das ich mit Python geschrieben habe.
Ich würde das ganze gerne in ein einziges Programm packen. Nach etwas querlesen wollte ich es mal mit dem qt Designer versuchen.
Ich muss ein Bild als laden und an mit der Maus gesetzten Koordinaten Zeichnen können. Wie kann ich das am einfachsten umsetzten, bzw. welche Komponente sollte ich mir dafür ausgucken?
Danke schon mal
[Anfanger Frage] Bild laden und darüber zeichnen
@Zero1234: Wenn man sich in der Qt-Dokumentation zu dem Thema umschaut, landet man bei der Übersicht zum Paint System.
-
- User
- Beiträge: 80
- Registriert: Dienstag 14. November 2006, 10:40
Hallo Zero1234,
witzigerweise hatte ich am Wochenende ein ähnliches Problem. Anbei meine "Lösung". Ich muss aber gestehen, dass es eines meiner ersten PySide-Skripte ist und mir half ein "Problem" zu isolieren. Also was Namenskonventionen, guten Programmierstil, Signal-Slot-Paradigmen und die "richtigen Klassen" usw. angeht ist es bestimmt nicht das beste und den Hinweis von BlackJack zum Paint System kannte ich auch nicht....Das Skript sollte mit einem entsprechenden Bild im Verzeichnis laufen. Danach einfach linke Maustaste drücken, Maus bewegen und den Button wieder freigeben. Dann zeigt sich bei mir eine blaue Linie...Ist zwar ein PySide-Skript, aber vielleicht hift es was.
Viele Grüße
Piet
witzigerweise hatte ich am Wochenende ein ähnliches Problem. Anbei meine "Lösung". Ich muss aber gestehen, dass es eines meiner ersten PySide-Skripte ist und mir half ein "Problem" zu isolieren. Also was Namenskonventionen, guten Programmierstil, Signal-Slot-Paradigmen und die "richtigen Klassen" usw. angeht ist es bestimmt nicht das beste und den Hinweis von BlackJack zum Paint System kannte ich auch nicht....Das Skript sollte mit einem entsprechenden Bild im Verzeichnis laufen. Danach einfach linke Maustaste drücken, Maus bewegen und den Button wieder freigeben. Dann zeigt sich bei mir eine blaue Linie...Ist zwar ein PySide-Skript, aber vielleicht hift es was.
Viele Grüße
Piet
Code: Alles auswählen
#! /usr/bin/env python
#coding=utf-8
import sys
from PySide import QtGui
from PySide.QtGui import QImage
from PySide.QtGui import QGraphicsView, QGraphicsScene
from PySide.QtGui import QPen
from PySide.QtGui import QPixmap
from PySide.QtCore import QPoint
from PySide import QtCore
class MeinQGraphicsView(QGraphicsView):
def __init__(self,scene,parent=None):
super(MeinQGraphicsView, self).__init__(scene,parent=parent)
print 'MeinQGraphicsView - init'
self.parent = parent
self.scene = scene
self.startPunkt = None
self.endPunkt = None
def mouseReleaseEvent(self, event):
print 'MeinQGraphicsView - mouseReleaseEvent'
if event.button() == QtCore.Qt.LeftButton:
self.endPunkt = event.pos()
self.male()
def mousePressEvent(self, event):
print 'MeinQGraphicsView - mousePressEvent'
if (event.buttons() & QtCore.Qt.LeftButton):
self.startPunkt = event.pos()
def male(self):
print 'MeinQGraphicsView - male'
if self.endPunkt and self.startPunkt:
print 'Start-Punkt:','(',self.startPunkt.x(),':',self.startPunkt.y(),') ,End-Punkt:','(',self.endPunkt.x(),':',self.endPunkt.y(),')'
pen = QPen()
pen.setColor(QtCore.Qt.blue)
self.startPunkt = self.mapToScene(QPoint(self.startPunkt.x(),self.startPunkt.y()))
self.endPunkt = self.mapToScene(QPoint(self.endPunkt.x(),self.endPunkt.y()))
self.scene.addLine(self.startPunkt.x(),self.startPunkt.y(),self.endPunkt.x(),self.endPunkt.y(),pen)
self.startPunkt = None
self.endPunkt = None
class MainWindow(QtGui.QMainWindow):
def __init__(self):
super(MainWindow, self).__init__()
print 'MainWindow - init'
self.setWindowTitle(u'Grafik übermalen')
self.setGeometry(100, 100, 800, 500)
self.setupUi()
self.show()
def setupUi(self):
print 'MainWindow - setupUi'
self.scene = QGraphicsScene(self)
self.scene.setSceneRect(0, 0, 800, 500)
loadedImage = QImage()
if not loadedImage.load("testbild.png"):
print 'Fehler!!'
self.image = loadedImage
self.scene.addPixmap(QPixmap.fromImage(self.image))
self.view = MeinQGraphicsView(self.scene, self)
self.setCentralWidget(self.view)
def paintEvent(self, event):
self.view.male()
def main():
print 'main'
app = QtGui.QApplication(sys.argv)
ex = MainWindow()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
Zuletzt geändert von Anonymous am Dienstag 8. Mai 2012, 20:27, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
Grund: Quelltext in Python-Code-Tags gesetzt.