Seite 1 von 1
Button Command
Verfasst: Mittwoch 27. Mai 2015, 14:49
von Gary123456
Code: Alles auswählen
from tkinter import *
master = Tk()
eingabe = Entry(master, textvariable = StringVar(value="Hello World"))
eingabe.pack(side = "bottom")
ok_button = Button(master, text="OK", command=print(eingabe.get()))
ok_button.pack()
master.mainloop()
Dieses Problem macht mich fertig. Ich suche seit gestern die Lösung, nachdem ich nach ewig langer Pause wieder den Einstieg in Python wagen musste/wollte.
Immer wenn ich das Modul starte, zeigt es mir sofort 'Hello World' in der Konsole an, obwohl es doch nur dann anzeigen sollte, wenn dieser Button auch gedrückt worden ist.
Der Fehler muss wohl so offentsichtlich sein, dennoch sehe ich ihn nicht.
Danke. Ein kurzer Tipp reicht aus.
Re: Button Command
Verfasst: Mittwoch 27. Mai 2015, 15:05
von Sirius3
Bei der Definition des Buttons führst Du die print-Funktion aus und bindest deren Rückgabewert (None) an den command-Parameter. Du möchtest wahrscheinlich eine Funktion definieren, die die print-Funktion ausführt und diese an command binden.
Re: Button Command
Verfasst: Mittwoch 27. Mai 2015, 16:15
von Gary123456
OK, verstanden. Ich versuche es nun über Events.
Wenn ein Benutzer mit der linken Maustaste auf den besagten Button klickt, soll der Text erscheinen, welcher sich im Eingabenfeld befindet.
Code: Alles auswählen
from tkinter import *
def callback(passwort):
print(passwort)
master = Tk()
eingabe = Entry(master, textvariable = StringVar(value="Hello World"))
eingabe.pack(side = "bottom")
ok_button = Button(master, text="OK")
ok_button.bind("<Button-1>", callback(eingabe.get()))
ok_button.pack()
master.mainloop()
Also:
Code: Alles auswählen
eingabe = Entry(master, textvariable = StringVar(value="Hello World"))
Wenn der Benutzer was anderes eingibt, ändert sich die Variable value?
Immer noch das gleiche Problem: Gleich beim Start des Programmes kommt: "Hello World" in der Konsole.
Dieses Problem zerfrisst mich und ich bin so bescheuert und sehe den Fehler nicht.
Re: Button Command
Verfasst: Mittwoch 27. Mai 2015, 16:53
von Sirius3
Auch bind erwartet wie das command-Argument eine Funktion und nicht den Rückgabewert einer Funktion, der None ist.
Re: Button Command
Verfasst: Mittwoch 27. Mai 2015, 17:01
von BlackJack
@Gary123456: `bind()` ist bei einer Schaltfläche ausserdem der falsche Weg weil sich das dann für den Benutzer ungewohnt verhält.
Re: Button Command
Verfasst: Mittwoch 27. Mai 2015, 17:22
von Gary123456
Habe nun das Problem gelöst.
Aber:
@Gary123456: `bind()` ist bei einer Schaltfläche ausserdem der falsche Weg weil sich das dann für den Benutzer ungewohnt verhält.
Was meinst Du damit genau?
Re: Button Command
Verfasst: Donnerstag 28. Mai 2015, 13:30
von BlackJack
@Gary123456: Dein `bind()` reagiert sofort mit der Aktion wenn man den Mausknopf auf der Schaltfläche drückt. Normale Schaltflächen reagieren 1. erst wenn man loslässt, und 2. auch nur wenn man *über der Schaltfläche* loslässt. Man kann also auch den Mausknopf über der Schaltfläche drücken, den Mauszeiger mit gedrückter Taste von der Schaltfläche herunterbewegen, und dann loslassen *ohne* das die Aktion ausgelöst wird. All das macht die Schaltfläche mit `command`. Wenn `command` und `bind` das selbe machen würden, bräuchte man `command` ja nicht, denn `bind` gibt es auf jedem Widget. Ausserdem kann man auch mit der Tabulatortaste den Fokus von Widgets ändern und wenn eine Schaltfläche den Fokus hat, diese mit der Leertaste auslösen. Das führt dann das `command` aus, aber nicht was mit `bind()` an die Maustaste gebunden ist.
Re: Button Command
Verfasst: Donnerstag 28. Mai 2015, 14:02
von Gary123456
Danke für die Erklärung.