Nur ein einziges Fenster?

Fragen zu Tkinter.
Antworten
Lambert
User
Beiträge: 40
Registriert: Montag 20. Februar 2006, 09:32

Hallo zusammen,

Ich bastle gerade ein Tkinter Fenster das mir zur Steuerung dienen soll. Also ich klicke z.B. in meinem Hauptfenster auf ein Wort in einer Listbox und es soll sich daraufhin ein entsprechendes Fenster Öffnen. Nun gäbe es zwei alternativen die mich interessieren:
a) gibt es eine Möglichkeit das es trotz eines erneuten Klickens auf das Wort nicht nochmal das zweite Fenster auf geht, z.B. dass das zweite Fenster einfach wieder aktiviert wird
b) ich würde es auch gerne mal so probieren, dass beim klicken auf das Wort das zweite Fenster aufgeht und gleichzeitig das Wort aus der Liste verschwindet. Soweit kein Problem. Aber wie kann ich beim schließen des zweiten Fensters das Wort wieder in der Liste erscheinen lassen.

Bin für jede Hilfe sehr dankbar

Gruß
lambert
Lambert
User
Beiträge: 40
Registriert: Montag 20. Februar 2006, 09:32

O.k. Frage a) war blöd. Dafür hab ich jetzt auch schon Threads gefunden. Also Childwindow eben.
Aber Frage b) brennt mir noch auf der Zunge. Gibt es eine Methode in tkinter die auf jedenfall noch ausgeführt wird wenn das zweite Fenster geschlossen wird. Darin würde ich dann die Listebox wieder füllen.
Benutzeravatar
Mawilo
User
Beiträge: 452
Registriert: Sonntag 22. Februar 2004, 10:58
Wohnort: Sachsen
Kontaktdaten:

Ich bin mir nicht sicher, ob ich dein Problem verstanden habe. Aber versuche doch mal wait_window() oder wait_variable().
Lambert
User
Beiträge: 40
Registriert: Montag 20. Februar 2006, 09:32

Ich glaube das ist es nicht ganz. Oder ich versteh es nicht.
Ich möchte in einer Listbox in Fenster A ein Wort erscheinen lassen nachdem ich Fenster B geschlossen habe. Also muss mein Programm irgendwie merken wenn sich Fenster B schließt.
BlackJack

Ich hab's nicht ausprobiert, aber kannst Du an Fenster `b` nicht einfach einen Handler für's Fenster-Schliessen binden?

Code: Alles auswählen

window_b.protocol("WM_DELETE_WINDOW", handler)
Die `handler`-Funktion kann dann das Wort wieder eintragen und `window_b.destroy()` aufrufen.
Benutzeravatar
Mawilo
User
Beiträge: 452
Registriert: Sonntag 22. Februar 2004, 10:58
Wohnort: Sachsen
Kontaktdaten:

Ich habe hier ein kurzes Beispiel (jedenfalls so habe ich es verstanden :D ):

Code: Alles auswählen

# -*- coding: iso-8859-15 -*-

import Tkinter as tk

class Test:
    def __init__(self):
        self.root = tk.Tk()
        self.listbox = tk.Listbox(self.root)
        self.listbox.pack()
        self.listbox.insert(tk.END, 'ein Wort')
        self.listbox.bind('<Double-Button-1>', self.fenster2)
        self.root.mainloop()
        
    def fenster2(self, event = None):
        self.fenster = tk.Toplevel()
        self.label = tk.Label(self.fenster, text = 'wenn das Fenster \
geschlossen wird, passiert was')
        self.label.pack()
        self.endeButton = tk.Button(self.fenster,
                                    text = 'Schliessen',
                                    command = self.ende)
        self.endeButton.pack()
        self.root.wait_window(self.fenster)
        self.neuesWort()
        
    def neuesWort(self):
        self.listbox.delete(0, tk.END)
        self.listbox.insert(tk.END, 'neues Wort')
        self.listbox.insert(tk.END, 'noch ein Wort')
        self.listbox.insert(tk.END, 'und noch ein Wort')
        self.listbox.insert(tk.END, 'letztes Wort')
        
        
    def ende(self):
        self.fenster.destroy()
        
if __name__ == '__main__':
    Test()
Kannst du damit etwas anfangen?

Stephan
Lambert
User
Beiträge: 40
Registriert: Montag 20. Februar 2006, 09:32

Ohhh, perfekt. Tausend dank. Ich schätze ich muss mich mit der Tkinter doch nochmal etwas genauer auseinandersetzen.

Gruß
lambert
Antworten