Seite 1 von 1

Can't delete Tcl command

Verfasst: Mittwoch 18. Juni 2008, 10:16
von sorgenlos
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?

Verfasst: Mittwoch 18. Juni 2008, 11:51
von BlackJack
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.

Verfasst: Mittwoch 18. Juni 2008, 18:04
von xnyzer
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?

Verfasst: Mittwoch 18. Juni 2008, 19:19
von numerix
xnyzer hat geschrieben:Ich möchte das Fenster nicht mehr haben. Ich brauche es nicht mehr. Wie soll ich es sonst wegbekommen?
So z.B.

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()

Verfasst: Mittwoch 18. Juni 2008, 19:39
von xnyzer
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???

Verfasst: Mittwoch 18. Juni 2008, 20:03
von BlackJack
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.

Verfasst: Mittwoch 18. Juni 2008, 20:12
von xnyzer
ahhhh... okay!
vielen dank :D

Verfasst: Donnerstag 19. Juni 2008, 10:39
von wuf
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 :wink:

Problem besteht weiterhin

Verfasst: Freitag 27. Juni 2008, 09:35
von xnyzer
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?

Verfasst: Freitag 27. Juni 2008, 09:57
von numerix
Mit passendem Code dazu wäre es einfacher, die Frage zu beantworten.