Как передать аргументы обратному вызову для StringVar? - PullRequest
0 голосов
/ 23 декабря 2018

Я настроил виджет Entry с помощью tkinter и использую StringVar для отслеживания любых изменений в нем.Однако, когда я пытаюсь использовать функцию обратного вызова, я обнаруживаю, что не могу передать ей ни одного аргумента.

Вот что я пробовал:

hpstring = StringVar()
hpstring.trace("w", hptrace)
hpstring.set("0")
hpbox = tk.Entry(frame, textvariable=hpstring)
hpbox.pack()

def hptrace(*args):
    print(hpstring)

Это не удалось, потому что hpstringне определено.

hpstring = StringVar()
hpstring.trace("w", hptrace(hpstring))
hpstring.set("0")
hpbox = tk.Entry(frame, textvariable=hpstring)
hpbox.pack()

def hptrace(*args):
    print(hpstring)

Это также как-то не получается.

hpstring = StringVar()
hpstring.trace("w", lambda hpstring: hptrace(hpstring))
hpstring.set("0")
hpbox = tk.Entry(frame, textvariable=hpstring)
hpbox.pack()

def hptrace(*args):
    print(hpstring)

На этот раз это не удается, потому что "() принимает 1 позиционный аргумент, но 3 было дано".

Есть ли способ, чтобы моя функция обратного вызова (hptrace) принимала hpstring в качестве аргумента?

1 Ответ

0 голосов
/ 29 декабря 2018

Есть ли способ, чтобы моя функция обратного вызова (hptrace) принимала hpstring в качестве аргумента?

Вы можете использовать lambda или functools.partial.Важно помнить, что функция, вызываемая трассировкой, вызывается с тремя аргументами , поэтому любая команда, которую вы даете trace, должна принимать эти три аргумента.

Использование lambda, ваш код должен выглядеть примерно так, если вы хотите отправить только hpstring на hptrace:

hpstring.trace("w", lambda var_name, var_index, operation: hptrace(hpstring))

Примечание: вам нужно определить hptrace, прежде чем пытаться его использовать, чтокод в вашем вопросе не удается.

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