Ersatz für QString in Python3

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
Benutzeravatar
nieselfriem
User
Beiträge: 135
Registriert: Sonntag 13. Januar 2013, 16:00

Hallo!

Ich versuche mich in QT mit PyQT. Dazu habe ich ein nettes Tutorial auf youtube gefunden. Dieses scheint auf Python 2.7 aufzubauen. Dort findet noch der DatenTyp QString und QStringList Verwendung. Nun weiß ich nicht, wie ich folgenden Codeschnipsel ersetzen soll da es den QString Datenyp nicht mehr gibt

Code: Alles auswählen

    
def headerData(self, section, orientation, role):
          if role == QtCore.Qt.DisplayRole:
             if orientation == QtCore.Qt.Horizontal:
                return QtCore.QString("Palette") #QString gibt es nicht
            else:
                return QtCore.QString("Color %1").arg(section) #QString gibt es nicht
Es wird davon gesprochen, dass man normale Strings verwenden soll aber das hat mit meinen kläglichen versuchen nicht funktioniert.
Wie kann ersetzt man QString nun richtig?

VG niesel
BlackJack

@nieselfriem: Man verwendet normale Zeichenketten. Das funktioniert auch schon in Python 2.x da `unicode` oder `str` Werte zu verwenden, also müsstest Du etwas konkreter werden was genau nicht funktioniert.
Benutzeravatar
nieselfriem
User
Beiträge: 135
Registriert: Sonntag 13. Januar 2013, 16:00

Nun ja, ich will nach nach diesem Tutorial und der oben angegebenen Methode den Header einer Tabelle und die Spaltenbezeichnung einfügen. Mach ich es so wie in dem Tutorial angebenden kommt die Fehlermeldung, dass QString nicht existiert. Verwende ich z.B. einfach nur ein

Code: Alles auswählen

return "blub"
oder

Code: Alles auswählen

return str("blub")
passiert eben gar nichts. Das heißt der Tabellenheader wird nicht geändert in "Blub".

VG niesel
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Dann wird es wohl an dem Code liegen, welcher den Header setzt. Wie sieht der denn aus?
Das Leben ist wie ein Tennisball.
Benutzeravatar
nieselfriem
User
Beiträge: 135
Registriert: Sonntag 13. Januar 2013, 16:00

Das ist der Code der den Header setzt. Es ist ja eine Methode in einem Listenmodel

Code: Alles auswählen

class PaletteListModel(QtCore.QAbstractListModel):
    
    def __init__(self, colors = [], parent = None):
        QtCore.QAbstractListModel.__init__(self, parent)
        self.__colors = colors

    def headerData(self, section, orientation, role):
        if role == QtCore.Qt.DisplayRole:
            if orientation == QtCore.Qt.Horizontal:
                return QtCore.QString("Palette")
            else:
                return QtCore.QString("Color %1").arg(section)

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

    def data(self, index, role):
        if role == QtCore.Qt.EditRole:
            return self.__colors[index.row()].name()
        if role == QtCore.Qt.ToolTipRole:
            return "Hex code: " + self.__colors[index.row()].name()

        if role == QtCore.Qt.DecorationRole:
            row = index.row()
            value = self.__colors[row]
            pixmap = QtGui.QPixmap(26, 26)
            pixmap.fill(value)
            icon = QtGui.QIcon(pixmap)
            return icon
          
        if role == QtCore.Qt.DisplayRole:
            row = index.row()
            value = self.__colors[row]
            return value.name()

Das ist die gesamte Klasse. Das beispiel ist unter dem Link herunter zu laden: https://www.youtube.com/redirect?q=http ... I2MzMzODYy

VG niesel
BlackJack

@nieselfriem: Gibt es in der Konsole denn irgendwelche Fehlermeldungen? Wird die Methode überhaupt aufgerufen?
EmaNymton
User
Beiträge: 174
Registriert: Sonntag 30. Mai 2010, 14:07

Also der von dir verlinkte Quelltext funktioniert mit der folgenden Änderung bei mir wunderbar:

Code: Alles auswählen

 def headerData(self, section, orientation, role):
        if role == QtCore.Qt.DisplayRole:  
            if orientation == QtCore.Qt.Horizontal:
                return "Meine Palette"
            else:
                return "Farbe {}".format(section)
Benutzeravatar
nieselfriem
User
Beiträge: 135
Registriert: Sonntag 13. Januar 2013, 16:00

Ich habs mal unter Windows probiert (Arbeitsrechner ;)) Da gehts mit dem original Quelltext und einfach nur Strings. Ich guck noch mal in Ruhe "mein" Gesamtwerk auf meinem Linuxrechner durch, wenn ich zu Hause bin.

Danke erst einmal für eure Mühe
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

@nieselfriem:
Für Python 2.x Kompatibilität könntest Du eine Importweiche nutzen und weiterhin mit QString arbeiten:

Code: Alles auswählen

try:  
    from PyQt4.QtCore import QString
except ImportError:
    QString = str
Antworten