Ajouter une entrée à la zone de liste si l'entrée est d'une certaine longueur

2020-08-02 python tkinter

Je suis nouveau sur python / tkinter dans mon laboratoire, nous utilisons un scanner de codes-barres pour scanner les numéros d'échantillons dans une base de données. Je veux juste pouvoir créer un widget d'entrée capable de détecter la longueur du texte qui lui est donné et si c'est cette longueur pour l'ajouter à une listbox. Voici mon code:

from tkinter import *


def my_tracer(arg1, arg2, arg3):
    SampleNumber = len(e1_var.get())
    t_var.set(SampleNumber)
    if t_var == 8:
        Listbox.insert(END, t_var)


root = Tk()
root.geometry("200x200")

SampleList = Listbox(root, selectmode=EXTENDED)
SampleList.pack()

t_var = StringVar()

e1_var = StringVar()
e1_var.trace("w", my_tracer)

e1 = Entry(root, textvariable=e1_var)
e1.pack()

root.mainloop()

Je n'obtiens aucune erreur mais rien ne se passe

Je suis sûr qu'il y a là quelque chose de fondamental qui me manque.

Merci d'avance

Answers

Le code suivant est incorrect:

if t_var == 8:
    Listbox.insert(END, t_var)

Ça devrait être:

if SampleNumber == 8:
    SampleList.insert(END, e_var.get())

Voici un code mis à jour basé sur le vôtre:

from tkinter import *

def my_tracer(*args):
    txt = e1_var.get().strip()
    if len(txt) == 8:
        SampleList.insert(END, txt)
        e1_var.set('') # clear the entry for next scan

root = Tk()
root.geometry("200x200")

SampleList = Listbox(root, selectmode=EXTENDED)
SampleList.pack()

e1_var = StringVar()
e1_var.trace("w", my_tracer)

e1 = Entry(root, textvariable=e1_var)
e1.pack()

root.mainloop()

PS: t_var n'est pas nécessaire, je l'ai donc supprimé.

Related