Frame neu laden

Fragen zu Tkinter.
Antworten
langeLeitung
User
Beiträge: 16
Registriert: Donnerstag 14. April 2005, 12:53

Hallo!

Wie kann ich einen Frame neu laden?
Der Frame ließt Variablen aus einer Datei. Diese Datei wird von einem Popup-Fenster geändert. Wenn sich dieses Fenster schließt soll der Frame neu aufgerufen werden, damit er die aktuellen Variablen einließt.

Vielen Dank für die Hilfe und ein schönes Wochenende!
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Hi!

Sorry, ich versteh's nicht ganz. Dein Frame liest Daten? Meines kann das nicht :wink:.
Sags bitte mal genauer, willst Du Daten in einem Entry oder Label anzeigen? Was genau ist das Problem?

Gruß, mawe
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Ich vermute mal folgendes:
Das Frame wird erstellt. Danach werden die Widgets auf dem Frame mit Daten gefüllt (aus dieser Datei). Danach wird ein Popup geöffnet, das die Daten verändert. Nun will langeLeitung, das das Frame die Daten aktualisiert, also die Datei neu einliest. Scheint mir persönlich aber kein Problem zu sein, man setzt einfach die Werte in den Widgets neu...
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Na gut, dann mal ein kleines Beispiel:

Code: Alles auswählen

from Tkinter import *
import tkSimpleDialog

def change():
    new = tkSimpleDialog.askstring("Na?","Na gib schon den neuen Wert ein!")
    l.configure(text=new)

root = Tk()
f = Frame()
f.pack()
l = Label(f,text="0")
l.pack()
Button(text="Change",command=change).pack()
root.mainloop()
langeLeitung
User
Beiträge: 16
Registriert: Donnerstag 14. April 2005, 12:53

Hallo!

Vielen Dank für eure Antworten. Ja, ich denke wohl noch nicht objektorientiert :oops:
OK, nun habe ich eine Funktion innerhalb der Klasse, die ich "Update" nenne. In Update werden mit Label und grid die Werte aus meiner Datei in ein Frame geschrieben.

Nun habe ich noch folgendes Restproblem:
Die neuen Wörter werden wirklich über die Alten geschrieben. Wir also ein kurzes Wort eingefügt und vorher stand ein Langes an der Position, so kann man Reste des alten Wortes noch immer sehen. Das Neue verdeckt das Alte nicht vollständig.

Kann ich die Inhalte einer Zelle der "Grid-Tabelle" geziehlt löschen?
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Hi!

Hab ich schon mal erwähnt dass ich nicht verstehe was Du meinst? :)
langeLeitung hat geschrieben: In Update werden mit Label und grid die Werte aus meiner Datei in ein Frame geschrieben.
Ok, heisst das, Du hast in einem Frame mehrere Labels (oder eines), die die Werte anzeigen?
langeLeitung hat geschrieben: Die neuen Wörter werden wirklich über die Alten geschrieben. Wir also ein kurzes Wort eingefügt und vorher stand ein Langes an der Position, so kann man Reste des alten Wortes noch immer sehen. Das Neue verdeckt das Alte nicht vollständig.
Kannst Du bitte zeigen, wie Du die Wörter auf die Labels (oder wohin auch immer) schreibst. Wenn Du's mit configure machst wie ich's gezeigt hab, sollte das nicht passieren.

PS: Nochmal: Zeig Code! :wink:

Gruß, mawe
langeLeitung
User
Beiträge: 16
Registriert: Donnerstag 14. April 2005, 12:53

Also... hier mein Code:

Code: Alles auswählen

datei = open('kopfdaten.txt', 'r')		
w=Label(self.frame3, text=(datei.readline().rstrip("\n")))
w.grid(row=0, column=1)
Die Zeilen stehen in der Funktion "Update". Wenn "datei" verändert wurde, rufe ich die funktion erneut auf. Das klatscht die Texte übereinander, darum kann man Fragmente von längeren Worten noch sehen, wenn ein kurzes Wort eingefügt wird...

@mawe: Warum verstehst Du mich eigentlich nicht :roll:
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Hi!

Warum erzeugst Du ein neues Label? Lass doch einfach das alte stehen und ändere nur den Text darauf.

Warum ich Dich nicht verstehe?
Anfangs hast Du geschrieben, dass Dein Frame Variablen einliest. Sowas kann ein Frame aber nicht. Dann hast Du irgendetwas von Label erwähnt, na gut, da war's dann eh halbwegs klar, was Du meinst (mit Betohnung auf halbwegs :wink:). Wie Du siehst hab ich ja richtig geraten :)

Gruß, mawe
langeLeitung
User
Beiträge: 16
Registriert: Donnerstag 14. April 2005, 12:53

Hallo mawe!

Wir kommen der Sache näher :D

Bitte verrate mir noch, wie ich den Text eines Labels ändern kann, ohne eine neues Label zu erstellen.

Vielen Dank
Stefan


PS: Mittlerweile habe ich das Buch "Python GE-PACKT". Ich hoffe, meine Fragen werden nun seltener und besser...
Gast

OK, jetzt weiss ich es.

Code: Alles auswählen

w.config(text="neuer Text")
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Hi!

Ein kurzer Blick auf mein Beispiel hätte die Frage auch beantwortet :wink:
Aber man lernt eh mehr wenn man selbst tüftelt :)

Gruß, mawe
Antworten