Ткинтер - отслеживание списка - PullRequest
0 голосов
/ 23 января 2020

Я пытаюсь использовать trace для управления пользовательскими значениями, которые вводятся в виджет Entry. У меня есть список размером 23. У меня есть другие списки, на которых я успешно использую трассировку, но они немного меньше (размер 4).

        def limit_10(*args):
            for i in skills:
                val = i.get()
                if not val.isnumeric():
                    val = ''.join(filter(str.isnumeric, val))
                    i.set(val)
                elif val.isnumeric():
                    if int(val) > 10:
                        i.set(10)
                    else:
                        i.set(val)

Здесь я объявляю свой список:

        for _ in SKILLS:
            i = StringVar()
            i.trace('w', limit_10)
            skills.append(i)

Когда я запускаю программу с установленной трассировкой, происходит следующее: программа не запускается.

Однако, если я перестану отслеживать свой список размером 23, все будет работать нормально. Я уверен, что моя проблема связана с плохой реализацией - для l oop в функции обратного вызова. Тем не менее, я не могу найти лучшего решения для извлечения значения из списка ...

Любая помощь очень ценится!

1 Ответ

0 голосов
/ 23 января 2020

Неважно, я решил это самостоятельно. Изменили мою функцию назначения списка на:

for _ in SKILLS:
    i = StringVar()
    i.trace('w', partial(limit_10, i))
    skills.append(i)

и мою функцию обратного вызова на:

def limit_10(i, *args):
    val = i.get()
    if not val.isnumeric():
        val = ''.join(filter(str.isnumeric, val))
        i.set(val)
    elif val.isnumeric():
        if int(val) > 10:
            i.set(10)
        else:
            i.set(val)

, и все работает нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...