In Tkinter eine Txt-Datei von Pickle anzeigen

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
Fl4mer
User
Beiträge: 25
Registriert: Donnerstag 24. November 2016, 19:10

Hey Leute.
Ich habe ein kleines Problem. Ich bin gerade dabei ein Telefonbuch zu schreiben mit GUI (tkinter). Bis jetzt kann ich mehrere Bücher anlegen, und Kontakte erstellen. Um Kontakte zu erstellen benutzte ich Pickle(weil ich die Bücher als .txt Format speichere). Nun wollte ich ein neues GUI Fenster programmieren.
In diesem Fenster soll nun die mit Pickle codierte Text Datei angezeigt werden, natürlich ohne die Hyroglaphen, die in Pickle entstehen. Aber ich weiß leider nicht wie ich dies in die Tat umsetze. Könnte mir hier vielleicht jemand helfen ?
Sirius3
User
Beiträge: 17749
Registriert: Sonntag 21. Oktober 2012, 17:20

@Fl4mer: Pickle ist keine Text-Datei und auch kein Format, das für längerfristige Speicherung geeignet ist. Eine Datenbank (SQLite ist auch Dateibasiert) ist eigentlich die typische Speicherform für ein Telefonbuch. Aber auch eine csv-Datei wäre möglich, um näher an Deiner Idee von einer Text-Datei zu bleiben. Wenn Du die Daten speichern kannst, müßtest Du sie auch laden können. Daher verstehe ich Deine Frage nach den Hieroglyphen nicht ganz.
Fl4mer
User
Beiträge: 25
Registriert: Donnerstag 24. November 2016, 19:10

Also ich kann meine Daten die ich in der txt. datei speicher auch abfragen. Sie werden mir dann auch auf der Konsole (Shell) angezeigt. Ich möchte jetzt aber, die Textdatei im Gui von Tkinter angezeigt bekommen, weiß aber nicht wie ich dies mache.
Sirius3
User
Beiträge: 17749
Registriert: Sonntag 21. Oktober 2012, 17:20

@Fl4mer: ohne zu wissen, was Du konkret machst, kann man Dir auch nicht helfen.
Fl4mer
User
Beiträge: 25
Registriert: Donnerstag 24. November 2016, 19:10

Ich lege ein Telefonbuch mit GUI an. Nun habe ich einen Menü Punkt mit dem man Kontakte erstellen kann. Diese Kontakte werden mithile des imports Pickle in einer Textdatei gespeichert. Nun möchte ich einen neuen Menü Punkt programmieren. Mithilfe von im sollen die Kontakte, welche in der Text Datei gespeichert sind im GUI aufgelistet werden.
Meine Frage ist gibt es eine Möglichkeit (Befehl) mit dem ich die Text Datei ins GUI einlese ?
Sirius3
User
Beiträge: 17749
Registriert: Sonntag 21. Oktober 2012, 17:20

@Fl4mer: Pickle-Dateien sind keine Text-Dateien! Und wenn Du weißt, wie man so eine binäre Pickeldatei speichert, dann weißt Du doch auch, wie man sie auch wieder liest.
Fl4mer
User
Beiträge: 25
Registriert: Donnerstag 24. November 2016, 19:10

Code: Alles auswählen

with open('highscores.txt', 'rb') as file:
                high_scores = pickle.load(file)
                high_scores.append((player_name, end_win))
                for i in high_scores:
                    print(i)
Das erzeugt soetwas in der Shell:

Code: Alles auswählen

(player_name, end_win)
(player_name, end_win)
Und so eine Ausgabe möchte ich im GUI.
Sirius3
User
Beiträge: 17749
Registriert: Sonntag 21. Oktober 2012, 17:20

@Fl4mer: jetzt siehst Du's ja selbst, Du öffnest die Datei im Binärmodus, es ist nur noch die Endung irreführend.

Code: Alles auswählen

with open('highscores.pkl', 'rb') as data:
    high_scores = pickle.load(data)
high_scores.append((player_name, end_win))
for idx, (name, score) in enumerate(high_scores, 1):
    print("{0:2d}. {1:10s} {2:5d}".format(idx, name, score))
Besser wäre aber wirklich, ein anderes Dateiformat zu benutzen!
Fl4mer
User
Beiträge: 25
Registriert: Donnerstag 24. November 2016, 19:10

Aber gibt es jetzt eine Lösung, dass ich dann die Datei im GUI anzeige ?
BlackJack

@Fl4mer: Ganz normal wie Du auch Daten aus einem Tupel in der GUI anzeigen würdest wenn das vorher nicht in einer Pickle-Datei gespeichert gewesen wäre. Das hat alles überhaupt nichts mit Pickle zu tun, sondern Du störst Dich wahrscheinlich an der Zeichenkettendarstellung von Tupeln. Die ist auch nicht für Endbenutzer gedacht, sondern für Programmierer. Du musst den Inhalt selbst so zu einer Zeichenkette verarbeiten damit es so aussieht wie *Du* das möchtest.
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
Aber gibt es jetzt eine Lösung, dass ich dann die Datei im GUI anzeige ?
Du musst doch einfach nur noch die print-Funktion gegen die geeignete Methode des GUI-Frameworks deiner Wahl austauschen und an geeigneter Stellen in den Code einbauen. Fertig.

Vielleicht solltest du einfach mal _deine_ Code zeigen, der das versucht, umzusetzen. Egal, wie falsch der ist. Aber dann hat man wenigsten einen Ansatzpunkt. Im Moment erweckt das ganze eher den Anschein, als hättest du keine Lust und wartest drauuf, dass dir jemand eine mundgerechte Lösung präsentiert.

Gruß, noisefloor
Fl4mer
User
Beiträge: 25
Registriert: Donnerstag 24. November 2016, 19:10

Habe es jetzt hinbekommen

Code: Alles auswählen

 with open('%s.txt' % self.book, 'rb') as file:
            book = pickle.load(file)
            x = 1
            for i in book:
                tk.Label(self.show_phonebook_wd, text = i).grid(row = x, column = 0)
                x += 1
Antworten