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
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 ...
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.
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"
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)