Hauptfenster nach Startung Unterfenster deaktivieren

Fragen zu Tkinter.
Antworten
Papp Nase
User
Beiträge: 139
Registriert: Dienstag 11. März 2014, 15:12

Hi,

ich habe ein Hauptfenster in tkinter mit Namen root. Ich habe einen Button, mit dem ich ein Unterfenster starte.

Ich möchte es jetzt so haben, dass ich im Hauptfenster solange nichts machen kann, bis das Unterfenster geschlossen wurde. Wie geht das?

Code: Alles auswählen

try:
    import tkinter as tk
except:
    import Tkinter as tk

class Sekundaermenue():
    def __init__(self, master=None):
        self._root = master
        self._ownframe = None
        
    def open(self):
        self._ownframe = tk.Toplevel()
        
        close_button = tk.Button (master=self._ownframe, command=self.close, text="fertig")
        close_button.pack()
   
    def close(self):
        # self._ownframe.quit()
        self._ownframe.destroy()

def main ():
    root = tk.Tk()
    
    mysek = Sekundaermenue()
    
    def do_exit():
        root.quit()
    
    submenue_button = tk.Button (master=root, text="subframe", command=mysek.open )
    submenue_button.pack()
   
    exit_button = tk.Button (master=root, text="Beenden", command=do_exit)
    exit_button.pack()
    root.mainloop()

if __name__ == "__main__":
    main ()
BlackJack

@Papp Nase: `grab_set()` und `wait_window()` sind die Methoden die man dafür braucht. Siehe auch Effbot's Dialog Windows.

Ich würde mir die Arbeit dafür aber sparen und eigene modale Dialoge von `tkSimpleDialog.Dialog` aus der Standardbibliothek ableiten und dort `body()` und `buttonbox()` und gegebenenfalls `validate()` und/oder `apply()` passend überschreiben.
Papp Nase
User
Beiträge: 139
Registriert: Dienstag 11. März 2014, 15:12

Der tkSimpleDialog-Kram funktioniert bei mir irgendwie nicht.

Ist tkSimpleDialog nicht Bestandteil von tkinter, sondern muss zusätzlich installiert werden?

Das Paket
"from tkColorChooser import askcolor "

hab ich z.B. auch nicht.
BlackJack

@Papp Nase: Aus dem Quelltext wird nicht so ganz klar welche Python-Version Du eigentlich verwendest. Du hast schon in der Dokumentation nachgesehen wie die Module heisse und von wo sie importiert werden müssen?
Antworten