Verlassen einer Funktion, mithilfe einer Funktion

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Zuzu_Typ

Dienstag 9. September 2014, 15:55

(Ich war mir nicht sicher, ob ich das "Thema" bei Tkinter oder hier schreiben sollte, aber egal)
Also, ich möchte ein Toplevel (Popup-Fenster) erstellen, bei dem man die Auswahl zwischen 2 oder mehreren Möglichkeiten (Buttons) hat. Mein Problem ist jetzt, wie kann ich die auswahl zurückgeben (return)?
Hier ist ein Beispielprogramm:

Code: Alles auswählen

# -*- coding: cp1252 -*-
from Tkinter import *
class Main:
    def toplevel(self, frage):
        self.popup = Toplevel()
        self.popup.geometry("300x100")
        self.label = Label(self.popup,text=frage)
        self.label.place(x=5,y=1)
        def return_yes():
            """Jetzt soll das programm "Ja" zurückgeben."""
        def return_no():
            """Jetzt soll das programm "Nein" zurückgeben."""
        self.button = Button(self.popup,text=" Ja ",command=return_yes)
        self.button.place(x=5,y=21)
        self.button2 = Button(self.popup,text=" Nein ",command=return_no)
        self.button2.place(x=100,y=21)
        self.popup.mainloop()
    def frage(self):
        self.toplevel("Ist 1 größer als 2?")
main = Main()
print "Du hast %s angegeben" % main.frage()
BlackJack

Dienstag 9. September 2014, 16:04

@Zuzu_Typ: Gar nicht. Man merkt sich halt in einem Attribut was der Benutzer gewählt hat und fragt das dann an der Stelle wo man es braucht ab.

Die Programmstrukturierung ist übrigens auch nicht besonders sinnvoll. Du hast da eine Klasse die nicht initialisiert wird und in der jede Methode alle möglichen Attribute einführt. Das ist nicht besser als das ohne Klasse zu schreiben und alles, also wirklich alles, als ``global`` zu deklarieren.

Vielleicht reicht Dir ja auch schon das `tkMessagebox` mit der `askquestion()`-Funktion. Oder ein selbsgebastelter Dialog auf Basis von `tkSimpleDialog.Dialog`.

`place()` ist auch etwas was Du Dir ganz schnell wieder abgewöhnen solltest. Absolute Positionen funktionieren heutzutage noch schlechter als früher weil die Display-Grössen und -Auflösungen noch deutlich unterschiedlicher geworden sind.
Zuzu_Typ

Dienstag 9. September 2014, 16:23

Danke schonmal, aber wie komme ich denn nun aus den Funktionen heraus?
Ich möchte sowohl die vom Button ausgeführte Funktion, als auch die toplevel() funktion beenden.
Antworten