validate und textvariable

Fragen zu Tkinter.
Antworten
bmh1980
gelöscht
Beiträge: 60
Registriert: Montag 26. Januar 2004, 17:13
Kontaktdaten:

Montag 27. Dezember 2004, 21:39

Hallo.

Ich versuche mich gerade wieder einmal mit Tkinter. Allerdings scheinen die Entrys und ich uns nicht so ganz zu verstehen. :wink:

Habe in meinem Skript folgenden Eintrag für ein Entry.

Code: Alles auswählen

    varia4 = Tkinter.DoubleVar()
    entry4 = Tkinter.Entry(master = frame1, validate = 'key', validatecommand =
                           Betrag, textvariable = varia4)
    entry4.bind('<Key>', BetragTmp)
    entry4.grid(column = 1, row = 4, sticky = W, padx = 6, pady = 6)
Wie die Namen der Funktionen ja schon verraten, soll in dieses Entry ein Betrag eingegeben werden.

Damit nicht irgend jemand auf die Idee kommt, in das Feld Buchstaben einzugeben, wollte ich das über validate abfangen.

Problem: Das geht nur, wenn ich auf textvariable verzichte. Dann muss ich aber irgendwie testen, ob der Betrag auch zum Type float gehört.

Und da weiß ich ehrlich gesagt nicht, wie ich das so einfach anstellen soll, da Entry.get() ja immer einen String zurück gibt.

Gibt es nicht eine Möglichkeit mit validate, validatecommand und textvariable zu arbeiten?

Ich versteh auch nicht, warum sich das bei Tkinter widerspricht.

Gruß

Marcus

<Edit>
Sorry, hab das Wichtigste ja gar nicht mit geschrieben. Nämlich was nicht geht.

Code: Alles auswählen

entry4.bind('<Key>', BetragTmp)
scheint den Dienst zu versagen, wenn man textvariable verwendet
</Edit>
ulla
User
Beiträge: 3
Registriert: Sonntag 26. Dezember 2004, 10:35
Wohnort: Berlin

Mittwoch 29. Dezember 2004, 10:18

Hallo Marcus,
ich versteh deinen Fehler nicht ganz.
Bei mir wird bei deinem Quellcode die Methode BetragTmp aufgerufen.
Willst du aber wirklich <key> an das Entry binden?
Das bedeutet ja, dass bei jeder gedrückten Taste die Methode aufgerufen wird, reicht nicht <Return>? :?
Gruß
Ulla
bmh1980
gelöscht
Beiträge: 60
Registriert: Montag 26. Januar 2004, 17:13
Kontaktdaten:

Mittwoch 29. Dezember 2004, 19:56

Vergiss es! Hab die ganze Zeit nicht kapiert, dass der Fehler nur beim Start des Skriptes auftaucht.

Und das lag daran, dass die Funktion Betrag ein Argument benötigt, dass erst in BetragTmp als Variable erzeugt wird. :roll:

Was <Key> und <Return> angeht. Mir wäre es persönlich lieber, wenn die Funktion erst dann aufgerufen wird, wenn das Widget den Focus verliert.

Bisher hab ich aber nichts passenden in der Doku zu Tkinter gefunden. Wenn es was mit Focus gibt, dann betrifft es immer nur das Fenster.

<Return> finde ich im Allgemeinen nicht so prikelnd. Soweit ich es mitbekommen habe, wechseln alle, die ich kenne Widgets mit Tab oder Enter. Und Tkinter unterscheidet ja auch zwischen Return und Enter. Warum auch immer.

Gruß

Marcus
ulla
User
Beiträge: 3
Registriert: Sonntag 26. Dezember 2004, 10:35
Wohnort: Berlin

Donnerstag 30. Dezember 2004, 08:42

bmh1980 hat geschrieben:Vergiss es! Hab die ganze Zeit nicht kapiert, dass der Fehler nur beim Start des Skriptes auftaucht.

Und das lag daran, dass die Funktion Betrag ein Argument benötigt, dass erst in BetragTmp als Variable erzeugt wird. :roll:
Kann passieren. :lol:
Gruß
Ulla
Antworten