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 ?
In Tkinter eine Txt-Datei von Pickle anzeigen
@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.
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.
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 ?
Meine Frage ist gibt es eine Möglichkeit (Befehl) mit dem ich die Text Datei ins GUI einlese ?
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)
Code: Alles auswählen
(player_name, end_win)
(player_name, end_win)
@Fl4mer: jetzt siehst Du's ja selbst, Du öffnest die Datei im Binärmodus, es ist nur noch die Endung irreführend.
Besser wäre aber wirklich, ein anderes Dateiformat zu benutzen!
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))
@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.
- noisefloor
- User
- Beiträge: 3856
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
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
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.Aber gibt es jetzt eine Lösung, dass ich dann die Datei im GUI anzeige ?
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
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