Seite 1 von 1

if but1 is True: ???

Verfasst: Freitag 30. Januar 2009, 11:00
von py-mule
Hallo,
ich möchte je nachdem welcher Button gedrückt ist eine Verzweigung anbringen. Ich habe es folgendermaßen versucht (geht aber nicht):

Code: Alles auswählen


but1=Button(text='but1', command = funktion_aufrufen)

if but1 is True:
    mach etwas
elif but2 is True:
    mach etwas anderes
elif but3
    noch was anderes
else:
    keine Ahnung
Wie bekomme ich eine solche Verzweigung hin?

Vielen Dank und viele Grüße
py-mule

Verfasst: Freitag 30. Januar 2009, 11:57
von wuf
Hallo py_mule

Dein Code kann so leider nicht funktionieren da er zu viele Fehler enthält. Sieht aus wie Pseudocode.

Hier ein Beispiel aus vielen Möglichkeiten:

Code: Alles auswählen

import Tkinter as tk

def funktion_aufrufen(button_name):
    """Schaltflaeche wurde aktiviert"""

    if button_name == 'but1':
        print "mach etwas"
    elif button_name == 'but2':
        print "mach etwas anderes"
    elif button_name == 'but3':
        print "noch was anderes"
    else:
        print "keine Ahnung "

app_window = tk.Tk()

button_name = 'but1'
but = tk.Button(app_window, text=button_name,
    command=lambda name=button_name: funktion_aufrufen(name))
but.pack()

button_name = 'but2'
but = tk.Button(app_window, text=button_name,
    command=lambda name=button_name: funktion_aufrufen(name))
but.pack()

button_name = 'but3'
but = tk.Button(app_window, text=button_name,
    command=lambda name=button_name: funktion_aufrufen(name))
but.pack()

button_name = 'no idea'
but = tk.Button(app_window, text=button_name,
    command=lambda name=button_name: funktion_aufrufen(name))
but.pack()

app_window.mainloop()
Gruss wuf :wink:

Re: if but1 is True: ???

Verfasst: Freitag 30. Januar 2009, 12:42
von numerix
py-mule hat geschrieben:Wie bekomme ich eine solche Verzweigung hin?
Ui, das sieht aber gar nicht gut aus.

Ich denke, du solltest mal mit den Basics anfangen. Hier z.B.: http://www.wspiegel.de/tkinter/tk_probe01.htm

Verfasst: Freitag 30. Januar 2009, 14:00
von str1442
is prüft auf Objektidentität, nicht auf Gleichheit, wofür == geschaffen ist.

Verfasst: Freitag 30. Januar 2009, 15:09
von HWK
Um auf True zu testen, braucht man weder is noch ==. :wink:
MfG
HWK

Verfasst: Freitag 30. Januar 2009, 19:36
von BlackJack
Man sollte auch besser gleich die richtigen Funktionen an die `Button`\s binden statt in einer ``if``/``elif``-Kaskade zu entscheiden was gemacht wird.

Verfasst: Sonntag 8. Februar 2009, 21:13
von bords0
HWK hat geschrieben:Um auf True zu testen, braucht man weder is noch ==.
Der Vollständigkeit halber sei erwähnt, dass streng genommen

Code: Alles auswählen

if a:
und

Code: Alles auswählen

if a == True:
nicht unbedingt das gleiche Ergebnis liefern. Man denke zum Beispiel an

Code: Alles auswählen

a = [1]
(...oder war was anderes gemeint?)

Verfasst: Sonntag 8. Februar 2009, 21:30
von str1442
Mit if x: überprüft man den Wahrheitswert eines beliebigen Objektes. Wenn das bereits ein Wahrheitswert ist, wird er so genommen wie er ist. if x == True: Testet, ob ein Wert gleich dem Wahrheitswert True ist, wobei wieder ein True herauskommt. Es ist also redundant, auf diese Art und Weise zu testen, da if im Grunde automatisch auf Wahrheitswerte testet, und der Rest bloß ein Ausdruck ist, den Python auswertet, und dann True oder False zurückliefert. Das ein Test auf Gleichheit mit True nicht das gleiche ist wie ein Test auf den Wahrheitsheit eines Objektes, ist ja klar.

Verfasst: Sonntag 8. Februar 2009, 21:43
von EyDu
Vielleicht noch als Ergänzung: "if [1]" entspricht einem "if bool([1])". "bool" versucht dann auf [1] die Methode "__nonzero__" (bzw. "__bool__" ab 3.0) aufzurufen. Falls diese nicht existiert "__len__". Wenn beide kein Ergebnis liefern wird "True" zurückgegeben.

Edit: In etwa so:

Code: Alles auswählen

def bool(x):
    try:
        return x.__nonzero__()
    except AttributeError:
        try:
             return x.__len__()
        except AttributeError:
            return True