Ich habe neulich mit Tkinter Fenster gebastelt(hf=Tk() ) und dabei folgendes festgestellt:
Wenn man zum Beispiel auf Knopfdruck Fenster A schließt und Fenster B öffnet, so öffnet sich Fenster B etwas versetzt(von der ehemaligen Position des Fensters A aus gesehen).
Deshalb "wandert" die Position der Fenster bei mehrmaligem öffnen und schließen (Auch wenn man die Python-command-line mehrmals startet taucht dieses Problem auf, wobei da die Versetzung sinnvoll ist).
Daher meine Frage(n):
a) Kann man Tkinter irgendwie anweisen, das Fenster z.B. oben links im Bildschirm zu erstellen?
- oder -
b) Kann man verhindern, dass das Fenster versetzt generiert wird?
- oder -
c) Gibt es eine Art "Reset", der den Inhalt des Fensters(Frames, Buttons) auf 0 zurücksetzt?(Ich schreib ma auf was ich mir da so denke):
hf=Tk()
hf.title('Titel')
...
...(Inhalt; Frames, Buttons etc.)...
...
hf.reset()
Danke schonmal =)
Frames, Buttons etc. eines Fensters löschen
Widgets haben eine `forget()`-Methode um sie aus dem Elternwidget "rauszunehmen" und eine `destroy()`-Methode, die das Widget und alle Kinder "zerstört".
das geht so,Ferox hat geschrieben:
hf=Tk()
hf.title('Titel')
...
...(Inhalt; Frames, Buttons etc.)...
...
hf.reset()
Code: Alles auswählen
hf=Tk
#..blabla
#bei Geometriemanager pack
hf.pack_forget()
#bei grid
hf.grid_forget()
Danke für die Antwort, aber irgendwie macht der das nicht(wahrscheinlich bin ich zu blöd); hab beides mal ausprobiert; ich denke das ich das pack_forget nehmen müsste....ich schreib mal einen (vereinfachten) Ausschnitt hierhin:
Und
//Okay habs grad kapiert...is für alles was gepackt is
Dankeschön =)
Code: Alles auswählen
hf=Tk()
hf.title("Eintrag hinzufügen")
hf.config(bg="black")
Hrahmen=Frame(hf, bg="Black")
Hrahmen.pack()
Button(Hrahmen, text=' Test ', command=lambda: test(hf)).pack(side=LEFT)
....
....
hf.mainloop()
Code: Alles auswählen
def test(hf):
hf.pack_forget()
rahmen=Frame(hf)

Dankeschön =)
Gibt doch noch ein Problem:
Das Programmstück, dass ich zum experimentieren benutzt habe erzeugt einen AttributeError(s.u.)
Der Fehler lautet:
Exception in Tkinter callback
Traceback (most recent call last):
File "E:\Programme\Programmieren\Python\lib\lib-tk\Tkinter.py", line 1403, in __call__
return self.func(*args)
File "E:/Programme/Programmieren/Python/Test.py", line 9, in <lambda>
Button(mf, text='Test2', command=lambda: test2(mf.pack_forget())).pack()
AttributeError: 'NoneType' object has no attribute 'pack_forget'
Das Programmstück, dass ich zum experimentieren benutzt habe erzeugt einen AttributeError(s.u.)
Code: Alles auswählen
from Tkinter import *
def Start():
hf=Tk()
mf=Frame(hf)
mf.pack()
Button(mf, text='Test', command=lambda: test(mf.pack_forget())).pack()
hf.mainloop()
def test(mf):
Button(mf, text='Test2', command=lambda: test2(mf.pack_forget())).pack()
def test2(mf):
Button(mf, text='Test3').pack()
Start()
Exception in Tkinter callback
Traceback (most recent call last):
File "E:\Programme\Programmieren\Python\lib\lib-tk\Tkinter.py", line 1403, in __call__
return self.func(*args)
File "E:/Programme/Programmieren/Python/Test.py", line 9, in <lambda>
Button(mf, text='Test2', command=lambda: test2(mf.pack_forget())).pack()
AttributeError: 'NoneType' object has no attribute 'pack_forget'
Das ist ein ganz kleines bisschen wirr was Du da machst. Schau Dir an wo der Aufruf von `test()` steht: Da wird das Ergebnis von `mf.pack_forget()` übergeben. Das ist `None`.
Richtig, das hab ich mir auch schon gedacht. Aber auch wenn ich jetzt zum Beispiel
oder
mache, es kommt bei mir irgendwie immer derselbe Fehler raus =(
Code: Alles auswählen
def test(mf):
mf.pack_forget()
Button(mf, text='Test', lambda: test2(mf))
Code: Alles auswählen
def test(mf):
mf.pack_forget()
mf.pack()
Button(mf, text='Test', command=lambda: test2(mf))
ich weiss zwar nicht was du machen willst, aber egal.
Code: Alles auswählen
from Tkinter import *
hf=Tk()
def test2():
Button(hf, text='Test3').pack()
def Start():
mf=Frame(hf)
mf.pack()
b=Button(mf, text='Test', command=lambda: test(mf))
b.pack()
hf.mainloop()
def test(mf):
mf.pack_forget()
test2()
Start()