2009-09-10 10 views
34

Haben Sie eine intelligente Art und Weise kennen zu verstecken oder in irgendeiner anderen Art und Weise der Root-Fenster loszuwerden, die, geöffnet von Tk() erscheint? Ich möchte nur einen normalen Dialog verwenden.Wie werde ich Python Tkinter Root-Fenster loswerden?

Soll ich den Dialog überspringen und meine alle Komponenten im Hauptfenster setzen? Ist es möglich oder wünschenswert? Oder gibt es eine intelligentere Lösung?

+4

Der Bildlink ist ungültig. –

Antwort

47

Wahrscheinlich platziert die überwiegende Mehrheit der tk-basierten Anwendungen alle Komponenten im Standard-Root-Fenster. Dies ist der bequemste Weg, dies zu tun, da es bereits existiert. Die Wahl, das Standardfenster zu verbergen und das eigene zu erstellen, ist eine feine Sache, obwohl es nur ein bisschen zusätzliche Arbeit erfordert.

Um Ihre Frage zu beantworten, wie es zu verbergen, verwenden Sie die withdraw Methode der Root-Fenster:

import Tkinter as tk 
root = tk.Tk() 
root.withdraw() 

Wenn Sie wieder sichtbar aus dem Fenster machen wollen, rufen Sie den deiconify (oder wm_deiconify) -Methode.

root.deiconify() 

Sobald Sie mit dem Dialog fertig sind, können Sie das Root-Fenster zerstören zusammen mit allen anderen tkinter Widgets mit dem destroy Methode:

root.destroy() 
+0

Die Verwendung des Hauptfensters hat den Trick gemacht. Vielen Dank! –

+0

So auf Stackoverflow gibt es Lösungen mit .Destroy(), tkinter.Toplevel (Selbst-) .Destroy() beenden(), tkinter.Toplevel (Selbst-) .quit() zurückziehen(), Iconify() zur Auswahl. Nett. Abgesehen davon, dass kein einziger funktioniert ... Ich habe "top_lev = tkinter.Topelevel (label); label.master.destroy(); label.destroy(); top_lev.destroy(); root = tkinter.Tk(); root.withdraw(); root.destroy() "was wie ein Zauber wirkt (einige Sarkasmen beteiligt). –

+0

@deusexmachina: Sie alle funktionieren, wenn Sie sie verwenden, aber sie haben alle unterschiedliche Zwecke. Obwohl '.quit()' und '.destroy()' effektiv identisch sind. –

10

habe ich nicht getestet, da ich keine Python/Tkinter Umgebung, aber versuchen Sie dies.

In reiner Tk gibt es eine Methode „wm“ genannt, die Fenster zu verwalten. Dort kannst du etwas wie "wm withmywindow" machen, wo ".mywindow" ein Toplevel ist.

In TkInter sollten Sie in der Lage sein, etwas zu tun, ähnlich wie:

root = Tkinter.Tk() 
root.withdraw() # won't need this 

Wenn Sie wieder sichtbar aus dem Fenster machen wollen, rufen Sie den deiconify (oder wm_deiconify) -Methode.

root.deiconify() 
+0

Wie bekommen Sie das Fenster wieder oben? – IcyFlame

+1

@IcyFlame: Sie tun 'root.deiconify()', um das Fenster wieder zu sehen. –

+0

danke Sir, ich hatte schon diese Frage gestellt und bekam eine Antwort: http://stackoverflow.com/questions/15967690/showing-a-window-that-was-hidden-using-root-withdraw-in- tkinter – IcyFlame

4

Auf OSX, scheint Iconify besser zu arbeiten:

root = Tkinter.Tk() 
root.iconify() 
0

Wenn Sie nicht wollen, dort sein, „Blitz“, wie das Fenster erstellt wird, verwenden Sie diese leichte Variation:

import Tkinter as tk 
root = tk.Tk() 
root.overrideredirect(1) 
root.withdraw()