Multiple Vererbung von QFrame und QSvgWidget

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
schnumbl
User
Beiträge: 6
Registriert: Montag 9. Januar 2012, 21:30

Hallo zusammen,

ich bin ein Python-Neuling und versuche in Python 2.7 eine Klasse zu erstellen, die Funktionen von QSvgWidget und QFrame erbt.
Ich bekomme die Fehlermeldung "AttributeError: 'ikwed_atom' object has no attribute 'load' ".
Meine Klasse ikwed_atom scheint nur von QFrame zu erben. Wie müssen die ersten Zeilen meiner Klasse aussehen,
damit ikwed_atom auch die load Funktion von QSvgWidget erbt?

Code: Alles auswählen

import sys
from PyQt4.QtCore import *
from PyQt4 import QtGui
from PyQt4 import QtSvg
        
class ikwed_atom(QtGui.QFrame, QtSvg.QSvgWidget):
    
    def __init__(self, ParentWidget, SvgString=""):
        super(ikwed_atom, self).__init__(ParentWidget)
        
        self.setFrameStyle(1)
        self.load(QByteArray(SvgString))
#...
Sonnige Grüße,

Stefan
Zuletzt geändert von schnumbl am Dienstag 10. Januar 2012, 07:47, insgesamt 1-mal geändert.
lunar

@schnumbl: Du kannst nicht von zwei oder mehr QObject-Klassen erben. Nicht einmal in C++. Anders gesagt, Du darfst immer nur eine einzige Basisklasse haben, in diesem Fall möchtest Du wohl einfach nur "QSvgWidget" nutzen.
schnumbl
User
Beiträge: 6
Registriert: Montag 9. Januar 2012, 21:30

Hier steht in Kapitel 9.5.1 etwas von "multiple inheritance":
http://docs.python.org/tutorial/classes.html

Daher dachte ich dass es gehen könnte.

Aber dann muss ich wohl eine andere Möglichkeit finden um Rahmen zu zeichnen.
Wäre bequem gewesen, wenn ich die Funktion von der QFrame Klasse hätte
übernehmen können.
lunar

@schumbl: In der Dokumentation von PyQt steht dazu auch etwas:
It is not possible to define a new Python class that sub-classes from more than one Qt class.
Das Tutorial alleine reicht nun mal nicht, Du musst schon auch die Dokumentation der von Dir verwendeten Bibliotheken lesen.

Um einen Rahmen um ein SVG-Element zu zeichnen, kannst Du dieses SVG Element einfach in ein "QFrame" einfügen. Das sollte eigentlich offensichtlich sein...
schnumbl
User
Beiträge: 6
Registriert: Montag 9. Januar 2012, 21:30

Ok, alles klar. Vielen Dank für deine Hilfe!
Antworten