Seite 1 von 2
Verfasst: Samstag 27. September 2008, 09:04
von wuf
Hallo kaytec
Danke für deinen komplett neuen Lösungsansatz. Werde deine Idee noch eingehender studieren. Das Eingabe-Feld muss ein Feld sein dessen Funktionalität dem eines Tk-Entry-Widget mit all seinen Steuerfunktionen wie TAB, DEL, END, HOME, ENTER usw. entspricht. Wie ich sehe benützt du ein Label-Widget. OK wie gesagt ich muss deine Variante noch genauer anschauen.
Es muss schlussendlich ein Eingabe-Widget werden in dem nur gewünschte Zeichen aufgenommen werden.
(Gut ich könnte das Entry-Widget von Pmw nehmen, aber ich möchte fur die GUI nur Tkinter importieren)
Besten Dank! Gruss wuf
Verfasst: Samstag 27. September 2008, 15:56
von yipyip
Hallo wuf,
dass die Enter-Taste löscht, habe ich eher
als Feature denn als Bug angesehen.
Hier nochmal eine Version *ohne* 'Enter' und 'Return':
http://paste.pocoo.org/show/86353/
Kaytec's Label-Lösung find' ich gut.
Daher hier eine kleine Erweiterung:
http://paste.pocoo.org/show/86354/
yipyp
Verfasst: Montag 29. September 2008, 19:11
von wuf
Hallo yipyip
Danke für deine Skripte. Bin leider zeitlich verhindert gewesen mich weiter mit dem Problem zu beschäftigen. Dein erstes Skript verhält sich was die ENTER betrifft für meinen Einsatz richtig. Aber wie schon angedeutet es ist noch nicht das Ende der Geschichte. Was ich mit meinem und deinem Skript festgestellt habe ist, wenn du etwas mit SHIFT plus Rechts-Taste markierst und mit einer Buchstaben-Taste löscht bleibt der Buchstabe im Eingabefeld zurück. Passiert aber nicht, wenn du mit SHIFT plus Links-Taste markierst.
Mit der Label-Variante muss ich mich noch näher beschäftigen.
Hier mein letzter Wurf:
[Code
ausgelagert]
Gruss wuf
Verfasst: Montag 29. September 2008, 20:27
von yipyip
...mmmh...
... bei Shift+Rechts+Buchstabentaste erscheinen bei *Deinem* Programm
keine Buchstaben, dafür aber bei
Tab+Ende+Buchstabentaste...
Ich halte das Ganze sowieso nicht für eine
so gute Idee, dem Entry-Widget so ins Handwerk
zu pfuschen, ich würde an Deiner Stelle
vielleicht doch lieber einen prinzipiell
anderen Ansatz vorziehen.
Ist das bei Deiner Aufgabe nicht möglich?
(Im Moment fällt mir für das Entry-Widget
nix Sinnvolles mehr ein
)
:K
yipyip
Verfasst: Montag 29. September 2008, 21:20
von wuf
Hallo yipyip
Deine Feststellung hat sich auch bei mir bestätigt. Stimmt es ist aufwendig das Entry-Widget zu bändigen. Trotzdem forsche ich weiter und möchte ich dir hierbei nochmals danken für deine grosszügige Unterstützung.
Gruss wuf
Verfasst: Dienstag 30. September 2008, 15:35
von wuf
Hallo yipyip
Hier meine Endlösung. Markierte Bereiche bzw. Zeichen können nur mit Zeichen gelöscht werden die das Filter zulässt mit Ausnahme der obligaten Steuerzeichen:
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# Verfasser : wuf
# Skriptname: entry_num_filter_05.py
# Datum : 30.09.2008
# Funktion : Eingabe mit Filter
import Tkinter as tk
from string import digits
ENTRY_FILTER = list(digits + ".")
class MyEntry(object, tk.Entry):
def __init__(self, parent):
self.parent = parent
self.entry_value = tk.StringVar()
tk.Entry.__init__(self, self.parent, width=20, bg='white', bd=1,
validate='key', vcmd=self.validate_entry, highlightthickness=0,
textvar=self.entry_value, exportselection=False)
self.pack(side='top')
self.bind('<Return>', self.entry_return)
def entry_return(self, event=None):
print "Entry-Value", self.entry_value.get()
def validate_entry(self):
index = self.index('insert')
value = self.entry_value.get()
arg = index, value
self.after_idle(self.test, arg)
return True
def test(self, arg):
self.flag = False
val_index, val_value = arg
index = self.index('insert')
value = self.entry_value.get()
for char in value:
if char in ENTRY_FILTER:
continue
else:
print 'Hallo', ord(char)
self.flag = True
self.entry_value.set(val_value)
self.icursor(val_index)
return
root = tk.Tk()
root.geometry('200x100')
my_entry = MyEntry(root)
my_entry.pack_configure(pady=10)
my_entry.focus_set()
root.mainloop()
Gruss wuf (the Voodoo-Programmer)