Eliminating AttributeError: 'tuple' object has no attribute 'focus_set' (Python 2.7)
Eliminating AttributeError: 'tuple' object has no attribute 'focus_set' (Python 2.7)
使用 Python 2.7,我使用 Tkinter 构建了一个 GUI。在我的 GUI 上,我有一个按钮可以打开输入弹出框。弹出框的调用是:
if analysistype == 'Line of sight':
d = MyDialog(root)
弹出框构造为:
class MyDialog(tkSimpleDialog.Dialog):
def body(self, master):
Label(master, text="Things").grid(row=0, columnspan=2)
Label(master, text="Thing 1").grid(row=1)
Label(master, text="Thing 2").grid(row=2)
self.t1 = Entry(master)
self.t2 = Entry(master)
thing1 = self.t1.grid(row=1, column=1)
thing2 = self.t2.grid(row=2, column=1)
return thing1, thing2
在弹出框中输入任何内容之前,出现错误;完整的堆栈跟踪如图所示(分成几行,所以它不仅仅是一堆文本):
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Users\ajpung\AppData\Local\Continuum\Anaconda2\lib\lib-tk\Tkinter.py", line 1536, in call
return self.func(*args)
File "directory/ThingFinder.py", line 547, in fetch_data
thing1 = MyDialog(root)
File "C:\Users\ajpung\AppData\Local\Continuum\Anaconda2\lib\lib-tk\tkSimpleDialog.py", line 81, in init
self.initial_focus.focus_set()
AttributeError: 'tuple' object has no attributeattribute 'focus_set'
如果我注释掉 "return thing1, thing2" 行,我不会收到此错误。但是,我仍然需要 return 弹出框中的变量。为什么会这样?
body
方法应该 return 应该给予焦点的小部件。这就是为什么你得到你得到的错误:tkinter 试图将焦点放在应该是小部件的东西上,而不是元组。在你的情况下,你可能想要 return self.t1
为了能够获取对话框的值,您需要定义方法 apply
,它将值保存到 self.result
。然后您可以在对话框关闭时查询结果。
d = MyDialog(root)
root.wait_window(d.top)
print("the value is %s" % d.result)
这里有一个更完整的例子:http://effbot.org/tkinterbook/tkinter-dialog-windows.htm
使用 Python 2.7,我使用 Tkinter 构建了一个 GUI。在我的 GUI 上,我有一个按钮可以打开输入弹出框。弹出框的调用是:
if analysistype == 'Line of sight':
d = MyDialog(root)
弹出框构造为:
class MyDialog(tkSimpleDialog.Dialog):
def body(self, master):
Label(master, text="Things").grid(row=0, columnspan=2)
Label(master, text="Thing 1").grid(row=1)
Label(master, text="Thing 2").grid(row=2)
self.t1 = Entry(master)
self.t2 = Entry(master)
thing1 = self.t1.grid(row=1, column=1)
thing2 = self.t2.grid(row=2, column=1)
return thing1, thing2
在弹出框中输入任何内容之前,出现错误;完整的堆栈跟踪如图所示(分成几行,所以它不仅仅是一堆文本):
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Users\ajpung\AppData\Local\Continuum\Anaconda2\lib\lib-tk\Tkinter.py", line 1536, in call return self.func(*args)
File "directory/ThingFinder.py", line 547, in fetch_data thing1 = MyDialog(root)
File "C:\Users\ajpung\AppData\Local\Continuum\Anaconda2\lib\lib-tk\tkSimpleDialog.py", line 81, in init self.initial_focus.focus_set()
AttributeError: 'tuple' object has no attributeattribute 'focus_set'
如果我注释掉 "return thing1, thing2" 行,我不会收到此错误。但是,我仍然需要 return 弹出框中的变量。为什么会这样?
body
方法应该 return 应该给予焦点的小部件。这就是为什么你得到你得到的错误:tkinter 试图将焦点放在应该是小部件的东西上,而不是元组。在你的情况下,你可能想要 return self.t1
为了能够获取对话框的值,您需要定义方法 apply
,它将值保存到 self.result
。然后您可以在对话框关闭时查询结果。
d = MyDialog(root)
root.wait_window(d.top)
print("the value is %s" % d.result)
这里有一个更完整的例子:http://effbot.org/tkinterbook/tkinter-dialog-windows.htm