Ein neues Problem hat mich ereilt: ein Label-Text (tkinter) soll gesetzt werden ("Reading dictionary-files.."). Dies passiert aber (anders als der print-Befehl, s. Code) erst nachdem die Datei eingelesen worden ist und nicht sofort.
Wer kann da weiterhelfen?
...
self.statusVar = StringVar()
self.statusLabel = Label(self.StatusFrame,textvariable=self.statusVar)
self.statusLabel.pack(side=TOP)
self.StatusFrame.pack(side=BOTTOM)
self.statusVar.set("Reading dictionary-files..") # dies passiert erst nach dem Datei-Einlesen (s.u.) !?
self.pack()
dicfile = "./dictionaries/eng_deu.dic"
print dicfile # dies passiert sofort
# Datei oeffnen und zeilenweise lesen
f = open(dicfile, "r")
line = f.readline()
while line <> "":
line = f.readline() # hej! wie kann ich in diesem forum text einruecken?
f.close()
Label-Text (Tkinter) laesst sich nicht sofort setzen
Stichwort self... du arbeitest also mit Klassen. Kann es sein, dass du eine Instanz der Klasse erst nach dem Dateieinlesen bildest? (mir fehlt da ein wenig Code um das zu beurteilen).
Einrücken kannst du hier mit den [code]...[/code] Tags.
Einrücken kannst du hier mit den [code]...[/code] Tags.
Hab mein Programm mal verkuerzt, um dem Fehler beizukommen. Der folgende Code verhaelt sich so, dass erst die Datei geladen wird und dann das Fenster erscheint (mit statusLabel["text"] = "Done.").
Gewuenscht ist aber, dass das Fenster erscheint, der Label-Text "Reading dictionary-files.." erscheint, die Datei geladen wird und dann der Label-Text auf "Done." gesetzt wird.
Vielleicht weiss jemand, wie man's macht?
Gewuenscht ist aber, dass das Fenster erscheint, der Label-Text "Reading dictionary-files.." erscheint, die Datei geladen wird und dann der Label-Text auf "Done." gesetzt wird.
Vielleicht weiss jemand, wie man's macht?
Code: Alles auswählen
from Tkinter import *
from tkFont import *
class MainWindow(Tkinter.Frame):
def __init__(self):
Frame.__init__(self)
StatusFrame = Frame()
statusVar = StringVar()
statusLabel = Label(StatusFrame,textvariable=statusVar)
statusLabel.pack(side=TOP)
StatusFrame.pack(side=BOTTOM)
statusVar.set("Reading dictionary-files..")
self.pack()
dicfile = "./dictionaries/unidad_0.dic"
print dicfile # dies passiert sofort
# Datei oeffnen und zeilenweise lesen
f = open(dicfile, "r")
line = f.readline()
while line <> "":
print line
line = f.readline()
f.close()
statusVar.set("Done.")
if (__name__ == "__main__"):
# create the application
App = MainWindow()
App.mainloop()
Hallo!
hth
Jan
Bevor die Datei nicht komplett eingelesen wurde, kommen GUI-Events gar nicht erst zum Zuge. Dafür ist deren Priorität zu niedrig. Mit update_idletasks() kannst Du aber erzwingen, dass erstmal die anstehenden Events abgearbeitet werden, bevor es weitergehen soll.madgonzales hat geschrieben:Vielleicht weiss jemand, wie man's macht?
Code: Alles auswählen
...
self.pack()
self.update_idletasks()
...
Jan