Python ttk.Button -команда, запускается без нажатия кнопки - PullRequest
1 голос
/ 01 июня 2010

Я делаю небольшой скрипт на python с помощью ttk, и у меня возникает проблема, когда функция запускается там, где она не должна.Код кнопки выглядит следующим образом:

btReload = ttk.Button(treeBottomUI, text="Reload", width=17, command=loadModelTree(treeModel))
btReload.pack(side="left")

, а функция выглядит следующим образом:

def loadModelTree(tree):
    print ("Loading models...")
    allModels = os.listdir(confModPath)
    for chunk in allModels:
        ...

По какой-то причине функция работает без нажатия кнопки.Почему?

Ответы [ 2 ]

2 голосов
/ 25 июля 2012

Маркус, да, это правильное решение, но это не потому, что вы не можете использовать команды с несколькими аргументами в выносках виджетов. Учтите, что в вашем исходном коде ...command=loadModelTree(treeModel)... является вызовом метода. Лямбда позволяет вам абстрагировать команду, чтобы вы могли иметь произвольное количество аргументов, не путая интерпретатор, вызывая ее, например, ...command=lambda arg1=myarg1, arg2=myarg2, arg3=myarg3: myCallout(arg1, arg2, arg3)....

Надеюсь, это проясняет ситуацию.

1 голос
/ 01 июня 2010

Ну, так как я нашел ответ, я отвечу на свой вопрос. Оказывается, команды ttk.button не поддерживают отправку аргументов функциям, поэтому обходной путь заключается в следующем:

btReload = ttk.Button(treeBottomUI, text="Reload", width=17, command=lambda i=treeModel: loadModelTree(i))
btReload.pack(side="left")

Просто как пирог!

...