QObject::QTimer macht Probleme bei ModelView

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
Shaldy
User
Beiträge: 123
Registriert: Sonntag 2. März 2008, 22:49

Hallo zusammen!

Habe mich jetzt an die ModelView Architektur von PyQt herangewagt und dazu ein Tutorial nachprogrammiert. Das Programm läuft (wenn ich es via Kommandozeile ausführe) fehlerfrei, erst, wenn ich es beende erscheint (nicht immer) die Nachricht:

QObject::startTimer: QTimer can only be used with threads started with QThread

Hier mein Code:

Code: Alles auswählen

from PyQt4.QtGui import *
from PyQt4.QtCore import *

class Model(QAbstractListModel):

    def __init__(self, colors, parent = None):
        QAbstractListModel.__init__(self, parent)
        self.__data = colors

    def rowCount(self, parent):
        return len(self.__data)

    def data(self, index, role):
        if role == Qt.DisplayRole:
            return self.__data[index.row()].name()
        elif role == Qt.DecorationRole:
            pixmap = QPixmap(self.__data[index.row()])
            icon = QIcon(pixmap)
            return icon
        elif role == Qt.ToolTipRole:
            return QString("Hex Code: %1").arg(self.__data[index.row()].name())

class View(QListView):
    def __init__(self, model, parent =None):
        QListView.__init__(self, parent)
        self.setModel(model)

app =QApplication([])
colors = [QColor(0, 0, 0), QColor(234, 75, 20), QColor(57, 83, 165)]
m = Model(colors)
v = View(m)
v.show()
app.exec_()
Dies ist keine Signatur!
Benutzeravatar
snafu
User
Beiträge: 6744
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Ein ziemlich ähnlich gelagertes Problem hatte ich vor kurzem auch. Ich kann dir nicht sagen, woran es genau liegt, aber als ich von PyQt auf PySide umgestiegen bin, kam die Meldung (und damit auch der Segfault) nicht mehr.
lunar

Es ist unnötig, aus der Farbe eine Pixmap und daraus dann nochmals ein Symbol zu erzeugen. Du kannst direkt ein QColor-Objekt zurückgeben. Außerdem musst Du dem Model-Objekt bei der Erzeugung die Ansicht als Vater mitgeben.
Antworten