Ausgabe in Variable speichern statt direkt ausgeben

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
Bolitho
User
Beiträge: 219
Registriert: Donnerstag 21. Juli 2011, 07:01
Wohnort: Stade / Hamburg
Kontaktdaten:

Hallo,

es geht um die Methode print_contents(self, sorting=None) der Klasse Aktienliste. In der geposteten Form funktioniert der Code und es erfolgt eine Ausgabe. Ich möchte die Ausgabe aber jetzt nicht direkt durchführen sondern an Tkinter zwecks Ausgabe in einem Textfeld übergeben.

Wenn ich

Code: Alles auswählen

text_aus_print_contents = *sorted(self.items, key=sortkey)
versuche bekomme ich eine Fehlermeldung. Auch diverse andere Versuche sowie eine Recherche im Internet blieben ohne Erfolg. Entweder habe ich gerade ein Brett vor dem Kopf oder irgendwas noch nicht verstanden. Bitte um Hilfe.

Vielen Dank!

Code: Alles auswählen

class Aktie(object):
    def __init__(self, counter):
        self.id = counter
        self.name = eingabe('Name: ')
        ...   

    def __str__(self):
        return ('{wkn:6} {name:15}  '
                '{aktkurs:8.2f} {aktdiv:8.2f} {divrendite:8.2f} '
                '{akteps:8.2f} {kgv:8.2f}'.format(**self.__dict__))

...            

class Aktienliste(object):
    def __init__(self):
        self.items = []

    ...

    def print_contents(self, sorting=None):
        sortkey = attrgetter(sorting) if sorting else None
        print(*sorted(self.items, key=sortkey), sep='\n')       
Tkinter Übergabe:

Code: Alles auswählen

t.insert(END, text_aus_print_contents)
BlackJack

@Bolitho: Statt so etwas komisches zusammen zu hacken würde man eine Methode einführen die so ein Objekt in eine Zeichenkette umwandelt. Und die kann man dann mit `print()` ausgeben oder in eine GUI einfügen, oder als Mail verschicken, oder…

Objekte müssen kein `__dict__` haben oder falls sie es haben müssen dort nicht alle Attribute drin gespeichert sein, deshalb würde ich statt ``self.__dict__`` eher ``vars(self)`` schreiben. Beziehungsweise nur ``format(self)`` und dann als Platzhalter so etwas wie '{0.name}'. Und bitte hör auf Namen abzukürzen, das liest sich ja furchtbar.
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

@Bolitho: wenn Du eine Fehlermeldung bekommst, wäre es nett zu wissen, was für eine Fehlermeldung das ist. Das * vor "sorted" bedeutet, dass die Ergebnisliste entpackt und die Elemente als einzelne Argumente an "print" übergeben werden. Sowas macht nur bei Funktionsaufrufen einen Sinn, nicht bei Zuweisungen.
Antworten