Gestaltungsfrage: Zugriff auf locale; Wo Funktion einfügen?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Hellstorm
User
Beiträge: 231
Registriert: Samstag 22. Juni 2013, 15:01

Hallo,

ich habe mir mit PyQt eine Funktion geschrieben, um eine Dateigröße in Bytes in einen lesbaren String umzuwandeln, mit Berücksichtigung des entsprechenden Dezimaltrenners (Komma oder Punkt). Das klappt auch ohne Probleme:

Code: Alles auswählen

    def make_size_readable(self, bytes):
        units = (
                (1024 ** 5, self.tr("{} PiB")),
                (1024 ** 4, self.tr("{} TiB")),
                (1024 ** 3, self.tr("{} GiB")),
                (1024 ** 2, self.tr("{} MiB")),
                (1024 ** 1, self.tr("{} KiB")),
                (1024 ** 0, self.tr("{} B"))
                    )

        for factor, prefix in units:
            if bytes >= factor:
                return prefix.format(self.locale.toString(bytes/factor, 
                                                    format = "f",
                                                    precision = 3))
Ich frage mich nur, wo ich diese Funktion jetzt genau einfügen soll. Im Moment habe ich sie im MainWindow stehen, aber ich will sie auch woanders nutzen (insbesondere in einem QAbstractTableModel). Daher würde ich sie im Grunde gerne als normale Funktion außerhalb einer Klasse schreiben, um einfacher darauf zugreifen können. Das self.tr könnte ich durch ein QtCore.QCoreApplication.translate ersetzen, was auch kein Problem ist. Allerdings macht mir die locale ein Problem:

Im Moment nutze ich die Funktion toString eines QtCore.QLocale-Objektes, die auch wunderbar funktioniert. Allerdings muss ich dafür erst einmal eine locale erstellen. Ich könnte jetzt natürlich in der Funktion selber „locale = QtCore.QLocale.system().name()“ schreiben und würde dann die aktuelle locale herauskriegen, aber das hätte dann den nachteiligen Effekt, dass ich dann die Sprache nicht mehr im Programm selber ändern könnte (bzw. es hätte dann keinen Einfluss auf die Funktion). Oder ich übergebe der Funktion bei jedem Aufruf die locale, was aber auch irgendwie nervig ist.

Hat da jemand eine Idee, wie ich das machen könnte? Weiter im MainWindow, als klassenfreie Funktion (wie nennt man das?) oder eventuell eine ganz eigene Klasse?

Danke!
Antworten