[Anfanger Frage] Bild laden und darüber zeichnen

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
Zero1234
User
Beiträge: 10
Registriert: Samstag 28. April 2012, 00:34

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
BlackJack

@Zero1234: Wenn man sich in der Qt-Dokumentation zu dem Thema umschaut, landet man bei der Übersicht zum Paint System.
Piet Lotus
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

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.
Antworten