2015-05-09 52 views
0

我有一個OptionMenu小部件,通常用列表(如課程列表)填充。Tkinter 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)不被視爲一個變量,因此不足以通過。我怎樣才能解決這個問題?

回答

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()分配returngrid()mywidget,這是None。您的小工具應在分配後的單獨聲明中應該grid()