Пустой словарь Tkinter OptionMenu

У меня есть виджет OptionMenu, который обычно заполняется списком (например, списком курсов).

    self.var_course = StringVar(self.add_window)
    if len(courses) > 0:
        self.var_course.set(self.courses.keys()[0])
    course_drop = OptionMenu(self.add_window, self.var_course, *self.courses).\
        grid(row=0, column=1)
    Button(self.add_window, text="New", height=1, width=1).\
        grid(row=0, column=2)  

Иногда этот список будет пустым, потому что пользователь не добавил ни одного класса. Это вызывает ошибку при создании course_drop.

File "blah/blah/blahblablah", line 32, in blah
course_drop = OptionMenu(self.add_window, self.var_course, *self.courses).
\TypeError: __init__() takes at least 4 arguments (3 given)

Когда в словаре есть значения, код работает нормально, однако, когда он пуст, я получаю указанную выше ошибку. Я предполагаю, что пустой словарь (self.courses) не рассматривается как переменная, и поэтому передается недостаточно. Как я могу обойти это?


person user2455869    schedule 09.05.2015    source источник


Ответы (1)


try:
    course_drop = OptionMenu(self.add_window, self.var_course,
                  *self.courses).grid(row=0, column=1)
except TypeError:
    pass # display an error, prompt for something that will allow a retry, whatever

Другой вариант:

    course_drop = OptionMenu(self.add_window, self.var_course,
                  *self.courses if self.courses else 0).grid(row=0, column=1)
                  # pick a default value that makes sense if 0 does not

Наконец, имейте в виду, что mywidget = Widget(option=value).grid() присваивает return значение grid() mywidget, то есть None. Вы должны grid() разместить свои виджеты в отдельном операторе после их назначения.

person TigerhawkT3    schedule 09.05.2015