habe folgendes Problem: ich möchte die eingegebenen Daten in einem Entry-Widget prüfen und ggf. ändern ("," mit "." ersetzen). Schritt 1: Mittels eines Re-Objekts prüfe ich die Eingabe; wenn da was anderes drinsteht außer Zahlen, Kommas oder Punkte, dann motzt das Programm (das funktioniert auch). Schritt 2: Komma durch Punkt ersetzen. Wie kann ich auf die "textvariable" des Widgets zugreifen (eine .set-Methode hat das Entry-Widget ja nicht)? Hab versucht, das "event.widget" über seinen Namen anzusprechen (.winfo_name()), aber das klappt nicht. Ich habe es auch mit den Methoden .getvar() und .setvar() probiert (http://effbot.org/tkinterbook/widget.ht ... var-method), aber mir ist nicht ganz klar, welche Variablen damit überhaupt gemeint sind. Irgendwo hab ich auch noch was von "validate"-Methoden gelesen, aber ich weiß nicht, ob die in Python 2.5 überhaupt eingebaut sind.
Schonmal Danke für evtl. Hinweise.
Code: Alles auswählen
from Tkinter import *
from re import *
import tkMessageBox
def pruefe(event):
re_reinraus = compile("([1-9]\d+[.,]\d+$)|([1-9]\d+$|[0-9])")
eingabe = event.widget.get()
if not re_reinraus.match(eingabe):
tkMessageBox.showwarning("Fehler","bitte eingabe pruefen")
event.widget.focus_set()
return
# komma durch punkt ersetzen
if "," in eingabe:
print "Komma drin"
variable = str(event.widget)
widgetname = event.widget.winfo_name()
print "Variable: ",variable
a=eingabe.replace(",",".")
variable.set(a)
if eingabe.isdigit():
event.widget.setvar(eingabe+".00")
fenster=Tk()
entry1_var = StringVar()
entry1 = Entry(fenster,textvariable=entry1_var)
entry1.bind("<FocusOut>",pruefe)
entry1.pack()
entry2 = Entry(fenster)
entry2.pack()
fenster.mainloop()