Seite 1 von 1

warum funktioniert if/else logik nicht

Verfasst: Donnerstag 8. Februar 2007, 17:57
von reverse
hello alle
brauche einbisschen logik hilfe!!

Code: Alles auswählen

from Tkinter import *

def callback():
//========= warum funktioniert if/else logik nicht ===========
    if label == "New":
        print "Das is ja wunderbar!"
    else:
        print "Das is ja nicht so toll!"
//==========================
root = Tk()

# create a menu
menu = Menu(root)
root.config(menu=menu)

filemenu = Menu(menu)
menu.add_cascade(label="File", menu=filemenu)
filemenu.add_command(label="New", command=callback)
filemenu.add_command(label="Open...", command=callback)
filemenu.add_separator()
filemenu.add_command(label="Exit", command=callback)

mainloop()

ps. wo kann ich ein beispiel vom tk bitmap combobox herunterladen?

mfg
reverse

Verfasst: Donnerstag 8. Februar 2007, 18:04
von HWK
Du solltest der Funktion den Label als Argument übergeben, z.B. in der Form:

Code: Alles auswählen

filemenu.add_command(label="New", command=lambda arg='New': callback(arg))
MfG
HWK

Verfasst: Donnerstag 8. Februar 2007, 19:17
von reverse
hello HWK
danke fur die feedback, leider erhalte ich immer noch fehler!!
filemenu.add_command(label="Value 1", command=lambda arg='Value 1': callback(arg))
TypeError: callback() takes no arguments (1 given)

Code: Alles auswählen

from Tkinter import *

def callback():
    if label == "Value 1":
        print "Value 1"
    elif label == "Value 2":
        print "Value 2"
    elif label == "Value 3":
        print "Value 3"
    else:
        print "Done"

root = Tk()

# create a menu
menu = Menu(root)
root.config(menu=menu)

filemenu = Menu(menu)
menu.add_cascade(label="Select Items", menu=filemenu)
filemenu.add_command(label="Value 1", command=lambda arg='Value 1': callback(arg))
filemenu.add_command(label="Value 2", command=lambda arg='Value 2': callback(arg))
filemenu.add_command(label="Value 3", command=lambda arg='Value 3': callback(arg))

mainloop()

Verfasst: Donnerstag 8. Februar 2007, 19:24
von pyStyler
Hallo,
und ich dachte du kannst Englisch :roll:

Code: Alles auswählen

def callback(label):
Gruss
pyStyler

Verfasst: Donnerstag 8. Februar 2007, 19:42
von reverse
hör mal pyStyler
Ich kann englisch :evil:

wie meinst du mit def callback(label):?

muss ich label einfugen
filemenu.add_command(label="Value 1", command=lambda arg='Value 1': callback(arg))

oder
def callback(): ---und label hier
if label == "Value 1":

????



warum ist das eigentlich so kompiziert in python????


add nums of items to menu and if it meets the conditon then throw message to an ouput...

menu 1 = val1
menu 3 = val2
menu 3 = val3

onMouseEvent(){
if menu 1== "Value 1":
print "Value 1"
elif menu 2== "Value 2":
print "Value 2"
elif menu 3== "Value 3":
print "Value 3"
else:
print "Done"
}

Verfasst: Donnerstag 8. Februar 2007, 19:51
von apollo13
Also doch kein Englisch :)
filemenu.add_command(label="Value 1", command=lambda arg='Value 1': callback(arg))
TypeError: callback() takes no arguments (1 given)
Sagt du rufst callback mit einem Argument auf:

Code: Alles auswählen

filemenu.add_command(label="Value 1", command=lambda arg='Value 1': callback(arg))
Dieses Argument ist arg (also eine Variable).

Du definierst mit def callback() eine Funktion die keine Variablen erwartet, somit übergibst du ein Argument an eine Funktion, die wie der TypeError schon sagt, keine Argumente annimmt!
Richtig ist, wie du selbst fast erkannt hast:

Code: Alles auswählen

def callback(label):
MfG apollo13[/code]

Verfasst: Donnerstag 8. Februar 2007, 20:05
von reverse
natürlich weiss ich dass arg für argument steht

was für mich am eher logisch erscheint

Code: Alles auswählen

from Tkinter import *

def callback():
    if arg1 == "Value 1":
        print "Value 1"
    elif arg2 == "Value 2":
        print "Value 2"
    elif arg3 == "Value 3":
        print "Value 3"
    else:
        print "Done"

root = Tk()

# create a menu
menu = Menu(root)
root.config(menu=menu)

filemenu = Menu(menu)
menu.add_cascade(label="Select Items", menu=filemenu)
filemenu.add_command(label="Value 1", command=lambda arg='Value 1': callback(arg1))
filemenu.add_command(label="Value 2", command=lambda arg='Value 2': callback(arg2))
filemenu.add_command(label="Value 3", command=lambda arg='Value 3': callback(arg3))

mainloop()

aber leider funktioniert es nicht :(

Verfasst: Donnerstag 8. Februar 2007, 20:11
von apollo13
Ohne unhöflich sein zu wolllen:
Liest du eigentlich was die anderen Leute schreiben, oder hörst du nach der ersten Zeile auf?
Und warum arg1, arg2, arg3 nicht gehen wird ist klar, wo sollen die herkommen^^

MgnfG apollo13

Verfasst: Donnerstag 8. Februar 2007, 20:22
von reverse
was ich nicht ganz kopiere sind die callback methode

def callback(Item1, Item2, Item3):
if label == "Item1":

Verfasst: Donnerstag 8. Februar 2007, 20:27
von pyStyler
reverse hat geschrieben:hör mal pyStyler
Ich kann englisch :evil:
ist ja gut schrei nicht so !

Code: Alles auswählen

from Tkinter import *
#import sys

def callback1():
	print "Value 1"
def callback2():
	print "Value 2"
def callback3():
	print "Value 3"
	#sys.exit() 

root = Tk()

# create a menu
menu = Menu(root)
root.config(menu=menu)

filemenu = Menu(menu)
menu.add_cascade(label="Select Items", menu=filemenu)
filemenu.add_command(label="Value 1", command=callback1)
filemenu.add_command(label="Value 2", command=callback2)
filemenu.add_command(label="Value 3", command=callback3)

mainloop() 
kannst Du jetzt damit was anfangen!
Und weil du so Nett :evil: bist, hier noch ein Link für dich.
http://effbot.org/tkinterbook/menu.htm

Verfasst: Donnerstag 8. Februar 2007, 20:28
von apollo13
Okay:

Code: Alles auswählen

def callback(label):
if label == "Value 1": pass
elif label == "Value 2": pass
....

filemenu.add_command(label="Value 1", command=lambda arg='Value 1': callback(arg))
filemenu.add_command(label="Value 2", command=lambda arg='Value 2': callback(arg))
filemenu.add_command(label="Value 3", command=lambda arg='Value 3': callback(arg))
Schau dir das genau durch und frag dann was exakt du hier nicht verstehst!

MfG apollo13

P.S.: Bitte bemühe dich möglichst nach der deutschen Rechtschreibung zu schreiben, dies verbessert die Les- und Verständlichbarkeit deiner Beiträge enorm :)[/code]

Verfasst: Donnerstag 8. Februar 2007, 20:37
von BlackJack
Wobei das kein besonders schöner Code ist, wenn man sich anschaut wie oft die jeweiligen Werte wiederholt eingegeben werden müssen. Wenn man da etwas ändern will, dann muss man das an verschiedenen Stellen im Programm tun. Das kann fehleranfällig werden.

Verfasst: Donnerstag 8. Februar 2007, 20:37
von reverse
immer noch error meldung

Code: Alles auswählen

def callback(label):
    if label == "Value 1": pass
        print "label"
    elif label == "Value 2": pass
        print "label2"
    elif label == "Value 2": pass
        print "label3"
    else:
        print "done"
print "label"
^
SyntaxError: invalid syntax
print "label" ......syntax error warum???

Verfasst: Donnerstag 8. Februar 2007, 20:39
von BlackJack
Weil alles nach einem ``:`` gleich tief eingerückt sein muss. Schau mal genau was da steht und versuch Dir jede einzelne Anweisung zu erklären.

Verfasst: Donnerstag 8. Februar 2007, 20:40
von apollo13
Du musst das "pass" weglöschen!
Pass heißt einfach so viel wie: "tu nichts und mach weiter" und ich war zu faul um print "label" etc... zu schreiben...

MfG apollo13

Verfasst: Donnerstag 8. Februar 2007, 20:45
von pyStyler
reverse hat geschrieben:immer noch error meldung

Code: Alles auswählen

def callback(label):
    if label == "Value 1": pass
        print "label"
    elif label == "Value 2": pass
        print "label2"
    elif label == "Value 2": pass
        print "label3"
    else:
        print "done"
weil du nach nichts mehr in der gleiche Einrückung schreiben darfst. Also sind deine print 'label'... für die Katz!
Mein Vorschlag - mach es wie ich es weiter oben gezeigt habe.

edit: war jemand wohl schon wieder schneller :)