2013-08-31 4 views
0

Я хочу создать tkinter OptionMenu, который редактирует другой OptionMenu, когда он будет изменен. Так что я попытался создать command= аргумент, который делает конкретную команду работать на каждом обновлении OptionMenu, как это происходит, когда я использую command= аргумент кнопку со счётчиком и т.д.Команда Tkinter OptionMenu Исключение

tl.wktype = OptionMenu(tl,wktypevar, *wk_types,command=typeupdate) 

где-то в коде команда typeupdate() - для целей отладки прямо сейчас.

def typeupdate(): 
    typeval = tl.wktype.get() 
    print(typeval) 

Питон исключение бросает следующий:

Exception in Tkinter callback 
Traceback (most recent call last): 
    File "C:\Python33\lib\tkinter\__init__.py", line 1475, in __call__ 
    return self.func(*args) 
    File "C:\Python33\lib\tkinter\__init__.py", line 3300, in __call__ 
    self.__callback(self.__value, *args) 
TypeError: typeupdate() takes 0 positional arguments but 1 was given 

Что позиционные аргументы действительно typeupdate() мозговым дается и как я могу это исправить?

ответ

5

Дается значение, которое нажимается. Для того, чтобы продемонстрировать, рассмотрим этот сценарий:

from tkinter import Tk, OptionMenu, StringVar 
root = Tk() 
def func(val): 
    print(val) 
var = StringVar() 
OptionMenu(root, var, "one", command=func).grid() 
root.mainloop() 

При запуске (и при нажатии на кнопку «один» в optionmenu), он печатает «один» в терминале.

Таким образом, в заключение, добавьте val (или любое другое имя аргумента) для вашего объявления функции, и он будет работать:

def typeupdate(val): 
+0

вас снова? Большое спасибо: D – CrushedPixel

+1

@CrushedPixel - Не проблема вообще. Также, как говорится в моем профиле, я специализируюсь на Tkinter. Таким образом, вопросы по этой теме - это некоторые из моих любимых. ;) – iCodez

+0

Осталось только один вопрос - как я могу объединить это с lambda: command(), чтобы передать больше, чем просто значение? Например, мне нужно передать переменную с именем «tl», но если я сделаю ее «обычным» лямбда-способом (command = lambda: cmdname (var, tl)), она выдает подобное исключение. – CrushedPixel

Смежные вопросы