Gib es eine Möglichkeit die aktuelle Cursor-Position in einem Entry-Widget als Index zurück zu lesen.
Besten Dank für eure Mühe.
Gruss wuf

Code: Alles auswählen
my_entry.index(tk.INSERT)
Code: Alles auswählen
# Verfasser : wuf
# Skriptname: entry_num_filter_01.py
# Datum : 24.09.2008
import Tkinter as tk
from string import digits, printable
def entry_key_press(event=None):
cursor_pos = entry.index('insert')
if event.keysym in printable:
if event.keysym in digits:
return
else:
entry.after_idle(remove_char, cursor_pos)
def remove_char(cursor_pos):
entry.delete(cursor_pos)
root = tk.Tk()
root.geometry('200x100')
entry = tk.Entry(root, width=20, bg='white', bd=1,
highlightthickness=0)
entry.place(x=20,y=20)
entry.bind('<KeyPress>',entry_key_press)
entry.focus_set()
root.mainloop()
Code: Alles auswählen
import Tkinter as tk
import string
####
class My_entry(object):
def __init__(self, root):
self.svar = tk.StringVar()
self.entry = tk.Entry(root,
textvariable=self.svar,
width=20, bg='white', bd=1)
self.entry.bind('<Key>', self.filter_digits)
self.entry.pack()
self.entry.focus_set()
def filter_digits(self, ev):
self.s = ''.join([d for d in self.entry.get() if d in string.digits])
self.svar.set(self.s)
pos = self.entry.index(tk.INSERT)
if not ev.keysym in string.digits:
self.entry.after_idle(lambda i: self.entry.delete(i), pos)
####
root = tk.Tk()
e = My_entry(root)
root.mainloop()
####
Code: Alles auswählen
import Tkinter as tk
import string
####
class My_entry(object):
def __init__(self, root):
self.svar = tk.StringVar()
self.entry = tk.Entry(root,
textvariable=self.svar,
width=20, bg='white', bd=1)
self.entry.bind('<Key>', self.filter_digits)
self.entry.pack()
self.entry.focus_set()
self.digits_kp = list(string.digits) + ['KP_' + c for c in string.digits]
def filter_digits(self, ev):
self.s = ''.join([d for d in self.entry.get() if d in string.digits])
self.svar.set(self.s)
pos = self.entry.index(tk.INSERT)
if not ev.char in self.digits_kp:
self.entry.after_idle(lambda i: self.entry.delete(i), pos)
####
root = tk.Tk()
e = My_entry(root)
root.mainloop()
####
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# Verfasser : wuf
# Skriptname: entry_num_filter_02.py
# Datum : 25.09.2008
# Funktion : Eingabe nur für Ziffern
import Tkinter as tk
from string import digits, printable, punctuation
def entry_key_press(event=None):
cursor_pos = entry.index('insert')
if event.char in printable:
if event.char in digits:
#~~ Nur Ziffern
return
else:
entry.after_idle(remove_char, cursor_pos)
if event.char in "äöüÄÖÜàéèÀÉȧ°ç£":
#~~ Umlaute und weitere Sonderzeichen
entry.after_idle(remove_char, cursor_pos)
def remove_char(cursor_pos):
entry.delete(cursor_pos)
root = tk.Tk()
root.geometry('200x100')
entry = tk.Entry(root, width=20, bg='white', bd=1,
highlightthickness=0)
entry.place(x=20,y=20)
entry.bind('<KeyPress>',entry_key_press)
entry.focus_set()
root.mainloop()
Code: Alles auswählen
#!/usr/bin/env python
import Tkinter as tk
import string
####
class My_entry(object):
def __init__(self, root):
self.svar = tk.StringVar()
self.entry = tk.Entry(root,
textvariable=self.svar,
width=20, bg='white', bd=1)
self.entry.bind('<Key>', self.filter_digits)
self.entry.pack()
self.entry.focus_set()
def filter_digits(self, ev):
in_str = self.entry.get()
self.s = ''.join([d for d in in_str if d in string.digits])
self.svar.set(self.s)
if ev.char in string.digits:
return
pos = self.entry.index(tk.INSERT)
self.entry.after_idle(lambda i: self.entry.delete(i), pos)
####
root = tk.Tk()
e = My_entry(root)
root.mainloop()
####
Code: Alles auswählen
#!/usr/bin/env python
import Tkinter as tk
import string
####
class My_entry(object):
def __init__(self, root):
self.svar = tk.StringVar()
self.entry = tk.Entry(root,
textvariable=self.svar,
width=20, bg='white', bd=1)
self.entry.bind('<KeyPress>', self.filter_digits)
self.entry.pack()
self.entry.focus_set()
def filter_digits(self, ev):
in_str = self.entry.get()
self.s = ''.join([d for d in in_str if d in string.digits])
self.svar.set(self.s)
#print ev.keysym
#print ev.char
if ev.keysym in ['Delete']:
return
if ev.char in string.digits:
return
pos = self.entry.index(tk.INSERT)
self.entry.after_idle(lambda i: self.entry.delete(i), pos)
#print self.svar.get()
####
root = tk.Tk()
e = My_entry(root)
root.mainloop()
####