Hallo,
hab folgendes Problem ich erzeuge ein Toplevel Fenster in dem ich zum Beispiel einen Button programmiere, der über das command Attribut eine weiteres Toplevel aufruft.
In dem zweiten Toplevel Fenster sind zum Beispiel ein "OK" Button und ein "Cancel" Button. Nun kann man ja für den Cancel Button übder das command Attribut "name_des_zweiten_toplevels.destroy() aufrufen um das Fenster zu schliesen.
UND NUN ZU DEM EIGENTLICHEN PROBLEM
Den "OK" Button aus dem zweiten Toplevel soll über command eine Funktion zugewiesen werden. Die Funktion soll so lauten, dass zum Beipsiel ein Eingaefeld ausgelesen wird und anschliessend das Fenster ebenfalls geschlossen wird, und genau ist mein Problem, mit welchem Befehl kann ich ein Fenster schliessen lassen, wenn ich in einer Funktion zu diesem Fenster arbeite, mit destory hab ich alles mögliche schon probiert, er erzeugt auch keinen compile Fehler aber funktionieren tut es auch nicht..
MIT WELCHEM BEFEHL KANN ICH DAS ZWEITE TOPLEVEL FENSTER IN DER FUNKTION WIEDER SCHLIESSEN????
Vielen Dank im voraus
Kann man destroy() auch in Funktionen verwenden?
-
- Python-Forum Veteran
- Beiträge: 1209
- Registriert: Montag 29. September 2003, 17:18
- Wohnort: Purkersdorf (bei Wien [Austria])
Hi!
Gruß, mawe
Versteh ich nicht. Naja, vielleicht hilft Dir das folgende Snippet:Spacekiss hat geschrieben: mit welchem Befehl kann ich ein Fenster schliessen lassen, wenn ich in einer Funktion zu diesem Fenster arbeite,
Code: Alles auswählen
from Tkinter import *
def create_top1():
top1 = Toplevel()
Button(top1,text="New",command=create_top2).pack()
Button(top1,text="Cancel",command=top1.destroy).pack()
def quit_top2(top, entry):
print entry.get()
top.destroy()
def create_top2():
top2 = Toplevel()
e = Entry(top2)
e.pack()
Button(top2,text="Ok",command=lambda: quit_top2(top2,e)).pack()
root = Tk()
Button(text="Go",command=create_top1).pack()
root.mainloop()
Hey, erstmal vielen Dank für die schnelle Antwort. ich erklärs nochmal anhand dem Quellcode. Es ist wahrscheinlich nur eine Minikleinigkeit die fehlt :
Man muss dazu sagen, dass dieses Fenster in meinem Programm ein Zweitfenster ist, das heisst es exitsiert noch ein Main Widget in der ein Button die Fuktion "varOK" (von der der Code dargestellt ist) aufruft.
Mein Problem ist nun, ich brauch einen Befehl an der Stelle vom Code mit den ganzen ###############, der das varOK Fenster nach drücken wieder schliesst
Edit (Leonidas): Code in Python-Tags gesetzt.
Code: Alles auswählen
def varInput(self):
rootVar = Tk()
rootVar.title("BLI - Variablen Eingabe")
width = 250
height = 120
label=Label(rootVar, text= "Bitte Variable eingeben")
label.pack(side=TOP)
self.vareingabe = Entry(rootVar, width=40, bg="white")
self.vareingabe.pack(side=TOP, padx = 20, pady = 20, fill=X)
ok = Button(rootVar, text= "OK", command = self.varOK )
ok.pack(side=LEFT, padx = 20, pady = 1)
abbrechen = Button(rootVar, text="Exit", command = rootVar.destroy )
abbrechen.pack(side=RIGHT, padx = 20, pady = 1)
mainloop()
# OK Button
def varOK(self):
self.eingabe.insert(INSERT, self.vareingabe.get())
### hier benötige ich einen Befehl, der das Fenster schliesst ###
Mein Problem ist nun, ich brauch einen Befehl an der Stelle vom Code mit den ganzen ###############, der das varOK Fenster nach drücken wieder schliesst
Edit (Leonidas): Code in Python-Tags gesetzt.
Soweit ich mich erinnere darf man nur ein Widget mit `Tkinter.Tk()` erstellen. Andere Toplevel-Widgets, ausser dem Hauptfenster mit `Tkinter.Toplevel()`.
-
- Python-Forum Veteran
- Beiträge: 1209
- Registriert: Montag 29. September 2003, 17:18
- Wohnort: Purkersdorf (bei Wien [Austria])
Hi!
@Blackjack:
Dürfen und sollen sind 2 verschiedene Dinge Du darfst mehrmals Tk() verwenden, Du sollst es aber nicht. Führt zu komischem Verhalten, siehe Tk-Scripte die man aus idle heraus aufruft.
@Spacekiss:
Hör auf Blackjack und verwende Toplevel(). Oder vielleicht noch besser: Verwende einen tkDialog
Gruß, mawe
@Blackjack:
Dürfen und sollen sind 2 verschiedene Dinge Du darfst mehrmals Tk() verwenden, Du sollst es aber nicht. Führt zu komischem Verhalten, siehe Tk-Scripte die man aus idle heraus aufruft.
@Spacekiss:
Hör auf Blackjack und verwende Toplevel(). Oder vielleicht noch besser: Verwende einen tkDialog
Code: Alles auswählen
from Tkinter import *
import tkSimpleDialog
def ask():
text = tkSimpleDialog.askstring("Question", "Enter whatever")
print text
root = Tk()
Button(text="Ask it", command=ask).pack()
root.mainloop()