Ich habe ein größeres Projekt mit Oberflächen geschrieben geschrieben.
Ich habe ein Tk Fenster. Dieses Ruft ein TL auf. Im TL wird ein neues Tk Fenster des gleichen Typs des ersten Tk Fensters erstellt und dann das alte Tk durch self.parent.destroy() zerstört.
Mein Programm funktioniert soweit, wie ich es wünsche nur immer beim Zerstören kommt der Fehler: Can't delete Tcl command.
Der Fehler stört beim Programmablauf nicht. Ich will aber keine Fehler im Programm. Was ist das? Ist es ein Bug von Tkinter?
Can't delete Tcl command
Heisst das jetzt Du hast zwei Exemplare von `Tk` im Programm? Selbst wenn nicht, ist das zerstören eines "Eltern"-Widgets sicher nicht der richtige Weg.
Hallo,
ich arbeite mit am Projekt von sorgenlos.
Was meinst du mit zwei Exemplaren? Also ja.. für eine kurze Zeit gibt es von dem Tk-Fenster zwei. Das erste wird aber direkt nach der Erstellung des Zweiten zerstört.
Warum ist es keine Möglichkeit? Ich möchte das Fenster nicht mehr haben. Ich brauche es nicht mehr. Wie soll ich es sonst wegbekommen?
ich arbeite mit am Projekt von sorgenlos.
Was meinst du mit zwei Exemplaren? Also ja.. für eine kurze Zeit gibt es von dem Tk-Fenster zwei. Das erste wird aber direkt nach der Erstellung des Zweiten zerstört.
Warum ist es keine Möglichkeit? Ich möchte das Fenster nicht mehr haben. Ich brauche es nicht mehr. Wie soll ich es sonst wegbekommen?
So z.B.xnyzer hat geschrieben:Ich möchte das Fenster nicht mehr haben. Ich brauche es nicht mehr. Wie soll ich es sonst wegbekommen?
Code: Alles auswählen
import Tkinter as tk
class App(object):
def __init__(self):
self.root = tk.Tk()
tk.Button(text="Create Window",command=self.create_window).pack()
tk.Button(text="Delete Window",command=self.delete_window).pack()
self.root.mainloop()
def create_window(self):
try:
self.window.deiconify()
except:
self.window = tk.Toplevel()
def delete_window(self):
try:
self.window.withdraw()
except:
pass
app = App()
aber ist es nicht so, dass withdraw() das fenster nur versteckt?
ich will es ja nicht verstecken sondern es wirklich "weghaben". ist das nicht möglich? muss ich alle fenster, die ich nicht mehr will (versteckt) geöffnet haben???
ich will es ja nicht verstecken sondern es wirklich "weghaben". ist das nicht möglich? muss ich alle fenster, die ich nicht mehr will (versteckt) geöffnet haben???
So ein `Tk`-Exemplar ist einzigartig, das darf man nur einmal erstellen. Daran hängt die Tk-Laufzeitumgebung. Wenn man mehrere "Hauptfenster" braucht, muss man das mit `Toplevel` machen. Notfalls kann man ja das `Tk`-Fenster gleich zu Beginn unsichtbar machen (`withdraw()`) und auch das erste Fenster schon mit `Toplevel` erstellen.
Hallo xnyzer
Wie schon BlackJack sagte kann in einer Anwendung nur ein Tk-Hauptfenster existieren. Du kannst aber mit der Methode os.popen('python my_new_tk.py') ein neues Python-Skript starten, welches wieder ein Tk-Hauptfenster erzeugt. Unmittelbar nach der Anweisung: os.popen('python my_new_tk.py') musst du mit der Methode 'sys.exit(0)' das erste Tk-Hauptfenster bzw. Anwendung wieder schliessen.
Gruss wuf
Wie schon BlackJack sagte kann in einer Anwendung nur ein Tk-Hauptfenster existieren. Du kannst aber mit der Methode os.popen('python my_new_tk.py') ein neues Python-Skript starten, welches wieder ein Tk-Hauptfenster erzeugt. Unmittelbar nach der Anweisung: os.popen('python my_new_tk.py') musst du mit der Methode 'sys.exit(0)' das erste Tk-Hauptfenster bzw. Anwendung wieder schliessen.
Gruss wuf
Take it easy Mates!
Sooo.. jetzt habe ich nur noch ein Tk. Alles andere sind TL.
Sobald ich aber mein Programm beenden möchte und auf das "X" im Tk klicke, wird das Fenster geschlossen und die gleiche Fehlermeldung erscheint.
Was nun?
Sobald ich aber mein Programm beenden möchte und auf das "X" im Tk klicke, wird das Fenster geschlossen und die gleiche Fehlermeldung erscheint.
Was nun?