Python tkinter eingabefeld.bind geht nicht?
Moin. Ich bin ein Anfänger in Programmieren und habe im Internet keine Lösung für mein Problem gefunden.
Ich habe versucht in ein Eingabefeld den Buchstaben M raus zu filtern mit:
eingabefeld.bind('M', funktion)
funktion:
def funktion():
eingabefeld.delete(0, END)
aber in der Console kommt:
Exception in Tkinter callback
Traceback (most recent call last):
File "pfad", line 1884, in __call__
return self.func(*args)
TypeError: q() takes 0 positional arguments but 1 was given
Hier der ganze code:
from tkinter import *
def q():
test.delete(0, END)
windows = Tk()
test = Entry(
font=('Comic Sans MS', 10)
)
button = Button(
text='d',
command=q
)
button.pack()
test.pack()
test.bind('M', q)
windows.geometry('420x420')
windows.title('tkinter lernen')
icon = PhotoImage(file='Bilder\logo.png')
windows.iconphoto(True, icon)
windows.config(background='#1AEFE0')
windows.mainloop() #erstellt das fenster
Der Button war noch mal extra um zu gucken, ob die Funktion klappt. Mit dem Button hat es geklappt.
1 Antwort
![](https://images.gutefrage.net/media/user/regex9/1455660989427_nmmslarge__0_13_270_270_615d5a3bc6888f4c1486ce2b4d9d8f60.png?v=1455660989000)
Der Callback, der an bind übergeben wird, bekommt bei Aufruf ein Argument (das Event-Objekt) überreicht. Das würde bildlicher dargestellt so aussehen:
q(someEventObject)
Nun hat deine Anwendung aber keine Funktion q, die einen Parameter definiert.
Eine einfache Lösung wäre es also, deiner Funktion noch einen Parameter zu spendieren.
def q(evt):
# your code ...
![](https://images.gutefrage.net/media/default/user/14_nmmslarge.png?v=1551279448000)
Es klappt doch nur anderes als ich dachte.
Wenn ich im Eingabefeld ein M eingebe, löscht es alles außer das M und gewollt war das es alles mit sich löscht.
![](https://images.gutefrage.net/media/user/regex9/1455660989427_nmmslarge__0_13_270_270_615d5a3bc6888f4c1486ce2b4d9d8f60.png?v=1455660989000)
Wenn du die Ereigniskette nach deinem Handler unterbrichst, passiert das nicht mehr. Dafür musst du deinen Handler lediglich den String break zurückgeben lassen.
def q(evt):
test.delete(0, END)
return "break"
![](https://images.gutefrage.net/media/default/user/14_nmmslarge.png?v=1551279448000)
Ich habe es nicht ganz verstanden es klappt leider immer noch nicht.
Mein code:
Aber wenn ich in test.bind('da', q), dann wird das d gelöscht das a aber nicht(geht auch mit anderen Buchstaben muss, aber zwei Buchstaben sein)