interaktives bild anzeigen

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
feldmaus
User
Beiträge: 284
Registriert: Donnerstag 12. Oktober 2006, 16:48

Hi ihr Python Schlangen, :-)

ich entwickle gerade eine MDI Anwendung in dem ein Fenster so
eine Art Routing Programm darstellt. Dort soll eine Landkarte
gezeigt werden, die in viele kleine 6 Ecke aufgeteilt ist.
Jedes 6 Eck soll mit der Maus anklick bar sein.

Nun habe ich erstmal versucht stumpf ein Bild mit QPixmap
zu laden, was leider nicht ganz funktioniert.
Hier ein Paar Meldungen:
StdErr: QPainter::begin: Widget painting can only begin as a result of a paintEvent
QPainter::begin: Painter already active
QPainter::setRenderHint: Painter must be active to set rendering hints
QPainter::save: Painter not active
QPainter::restore: Unbalanced save/restore
QPainter::end: Painter not active, aborted
Wie wird denn nun das PaintEvent gestartet ?
Ich habe einfach mal ein <self.update()> während der Initialisierung
des Objektes gemacht. Ist das ok ?

Grüße Markus
feldmaus
User
Beiträge: 284
Registriert: Donnerstag 12. Oktober 2006, 16:48

Ich poste mal nicht den ganzen Code, sonder nur das Fenster wo die interaktive
Landkarte nachher laufen soll.

Code: Alles auswählen

#!/usr/bin/env python
#
# reisehelfer.py
#

import sys
from PyQt4.QtGui import QMainWindow,  QDockWidget,  QPainter,  QAction,  QScrollArea
from PyQt4.QtGui import QPaintEvent,  QPixmap,  QPen,  QBrush
from PyQt4 import QtCore


class ReiseHelfer(QMainWindow):
    def __init__(self, parent=None):
        QMainWindow.__init__(self, parent)
        
        self.setAttribute(QtCore.Qt.WA_DeleteOnClose)
        
        self.createActions()
        self.createMenus()
        self.createStatusBar()

        self.setWindowTitle(self.tr("Reisehelfer"))
        self.scrollarea = QScrollArea()
        self.setCentralWidget(self.scrollarea)
        
        self.pen = QPen()
        self.brush = QBrush()
        self.pixmap = QPixmap()
        self.pixmap.load(":/media/images/aventurien.jpg")
        
        self.readSettings()
        
        self.update()


    def createActions(self):
        self.openMapAct = QAction(self.tr("&Open Map"), self)
        self.openMapAct.setShortcut(self.tr("Ctrl+O"))
        self.connect(self.openMapAct, QtCore.SIGNAL("triggered()"), self.loadMap)
    
        self.exitAct = QAction(self.tr("E&xit"), self)
        self.exitAct.setShortcut(self.tr("Ctrl+Q"))
        self.connect(self.exitAct, QtCore.SIGNAL("triggered()"), self, QtCore.SLOT("close()"))


    def createMenus(self):
        self.fileMenu = self.menuBar().addMenu(self.tr("&File"))
        self.fileMenu.addAction(self.openMapAct)
        self.fileMenu.addAction(self.exitAct)


    def createStatusBar(self):
        self.statusBar().showMessage(self.tr("Ready"))


    def loadMap(self):
        pass

    def paintEvent(self,  event):
        painter =  QPainter(self.scrollarea)
        painter.begin(self)
        painter.setPen(self.pen)
        painter.setBrush(self.brush)
        painter.setRenderHint(QPainter.Antialiasing,  True)  
        
        painter.save()
        painter.drawPixmap(10,  10,  self.pixmap)
        painter.restore()
        painter.end()



    def readSettings(self):
        settings = QtCore.QSettings("Echte-DSA-Helden", "DSA 4 Meisterhilfe")
        settings.beginGroup("WorkspaceWindow Reisehelfer")
        pos = settings.value("pos", QtCore.QVariant(QtCore.QPoint(50, 50))).toPoint()
        size = settings.value("size", QtCore.QVariant(QtCore.QSize(1100, 700))).toSize()
        self.move(pos)
        self.resize(size)
        settings.endGroup()

    def writeSettings(self):
        settings = QtCore.QSettings("Echte-DSA-Helden", "DSA 4 Meisterhilfe")
        settings.beginGroup("WorkspaceWindow Reisehelfer")
        settings.setValue("pos", QtCore.QVariant(self.pos()))
        settings.setValue("size", QtCore.QVariant(self.size()))
        settings.endGroup()


    def closeEvent(self, event):
        self.writeSettings()
        event.accept()
Antworten