Inhalt von txt-Datei in TK-Fenster anzeigen

Fragen zu Tkinter.
Antworten
-Pea-
User
Beiträge: 3
Registriert: Sonntag 28. Mai 2006, 11:40

Hallo zusammen!

Zuerst - bin ein Python-Frischling und fürchte das ist eine Frage die schon irgendwo mal beantwortet wurde. Habe aber ums verrecken nichts gefunden.


Ich habe ein Wörterbuch-Programm geschrieben, in welchem man Vokabeln speichern kann. Die eingegebenen Vokabeln werden in einer txt-Datei gespeichert. Über den einfachen Print-Befehl zeigt er sie mir auch wieder an. Möchte aber, dass sich, wenn man auf "Liste anzeigen" klickt, ein neues Fenster öffnet und die Vokabelliste darin angezeigt wird. Wie mache ich das?

Hier mal das Programm. Weiß nicht, welche Stellen für diese Funktion alle wichtig sind, deswegen zeige ich es lieber mal ganz :oops: . (Habe es übrigens natürlich nicht komplett alleine geschrieben, das "Grundgerüst" stammt von meinem Info-Lehrer :wink:):

[wiki]Paste/134[/wiki]

Edit (Leonidas): Code in Python-Tags gesetzt.
Edit (Leonidas): Code in Wiki ausgelagert.
Benutzeravatar
Mawilo
User
Beiträge: 452
Registriert: Sonntag 22. Februar 2004, 10:58
Wohnort: Sachsen
Kontaktdaten:

Hallo -Pea-,

zuerst solltest du dir überlegen, ob du die Vokabeln in einem Textfenster oder in einer Liste anzeigen lassen möchtest.
Um in einem Textfenster etwas einzufügen, kannst du

Code: Alles auswählen

textfenster.insert(index,text)

verwenden (der index wird mit zeile.spalte angegeben also z.B. 1.0). Näheres kannst du z.B. hier nachlesen.
Du hast auch die Möglichkeit, die Vokabeln in einer Listbox auszugeben. Dort werden die Einträge auch mit

Code: Alles auswählen

listbox.insert(index,item)

eingefügt. Der Index besteht aber nur aus einer Zahl (oder aus einem Schlüsselwort wie z.B. END). Näheres zu Listboxen findest du hier.
Wenn du nicht weiter kommst, dann schreibe genau, was dir unklar ist. Bei einer so allgemeinen Frage ist schwer zu antworten.

Um überhaupt erst mal ein neues Fenster aufzurufen, schreibe ich mir immer eine neue Klasse. In deinem Beispiel könnte das ungefähr so aussehen (nicht getestet):

Code: Alles auswählen

from Tkinter import *
from ScrolledText import *

class Vokabelliste:
	def __init__(self,vokabeldatei):
		self.vokdat = vokabeldatei
		self.root = Toplevel()
		self.fr01 = LabelFrame(self.root, text = 'Vokabelfenster')
		self.fr01.pack()
		self.textfenster = ScrolledText(self.fr01, width = 50, height = 15)
		self.textfenster.pack()
		self.vokabeln_einfuegen()
		self.root.mainloop()
		
	def vokabeln_einfuegen(self):
		datei = file(self.vokdat,'r')
		for line in datei:
			self.textfenster.insert('end', line)
		datei.close()
Diese Klasse rufst du aus dem Hauptprogramm auf.

Stephan
Benutzeravatar
Mr_Snede
User
Beiträge: 387
Registriert: Sonntag 8. Februar 2004, 16:02
Wohnort: D-Dorf, Bo

Für ein neues Fenster bietet sich das Toplevel Widget an:
http://effbot.org/tkinterbook/toplevel.htm
-Pea-
User
Beiträge: 3
Registriert: Sonntag 28. Mai 2006, 11:40

Also, mein neues Problem ist nicht unbedingt das neue Fenster, wenn ich den Befehl so schreibe
def Liste_anzeigen(self):
self.fenster= Tk()
print self.Woerterbuch
macht er ja ohne Probleme ein Fenster auf (benutze ja auch bei anderen Funktionen, zum Beispiel bei "Vokabel ändern" neue Fenster).

Mein Problem ist, wie kriege ich es hin, dass er den Inhalt von "self.Woerterbuch" nicht in Python selber schreibt (wie es ja bei dem einfachen Print-Befehl üblich ist), sondern dass er sie eben in diesem neuen Fenster anzeigt. Sorry, weiß nicht so recht wie ich das beschreiben soll :(
Benutzeravatar
Mawilo
User
Beiträge: 452
Registriert: Sonntag 22. Februar 2004, 10:58
Wohnort: Sachsen
Kontaktdaten:

Hmmm, du solltest vielleicht mal lesen, was ich geschrieben habe. Um in Tkinter etwas anzeigen zu können, musst du schon so etwas wie z.B. ein Textfenster oder eine Listbox definieren.

Code: Alles auswählen

def Liste_anzeigen(self): 
    self.fenster= Toplevel()
    self.textfenster = Text(self.fenster, width = 20, height = 15)
    self.textfenster.pack()
    self.textfenster.insert('end',self.Woerterbuch)
    self.fenster.mainloop()
Stephan
-Pea-
User
Beiträge: 3
Registriert: Sonntag 28. Mai 2006, 11:40

Arg, entschuldigung, habs irgendwie nicht beim ersten Versuch kapiert :oops: Habe schon so lange über das Problem nachgegrübelt, dass ich eben einfach den Wald vor lauter Bäumen nicht gesehen hab Ist ja eigentlich total simpel die Lösung ^^
Werds gleich mal ausprobieren!!!


EDIT: Es funktioniert!!!!!!!!!!!!! 1000 Dank nochmal!
Antworten