Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 消除归因错误:';元组';对象没有属性';焦点集';(Python 2.7)_Python 2.7_User Interface_Tkinter_Tk_Popupwindow - Fatal编程技术网

Python 2.7 消除归因错误:';元组';对象没有属性';焦点集';(Python 2.7)

Python 2.7 消除归因错误:';元组';对象没有属性';焦点集';(Python 2.7),python-2.7,user-interface,tkinter,tk,popupwindow,Python 2.7,User Interface,Tkinter,Tk,Popupwindow,使用Python2.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, co

使用Python2.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
在弹出框中输入任何内容之前,我得到一个错误;完整堆栈跟踪如图所示(分为几行,因此它不仅仅是一堆文本):

Tkinter回调中的异常

回溯(最近一次呼叫最后一次):

文件“C:\Users\ajpung\AppData\Local\Continuum\Anaconda2\lib\lib tk\Tkinter.py”,第1536行,在调用中 返回self.func(*args)

文件“directory/ThingFinder.py”,第547行,在fetch_数据中 thing1=MyDialog(根目录)

文件“C:\Users\ajpung\AppData\Local\Continuum\Anaconda2\lib\lib tk\tkSimpleDialog.py”,第81行,在init self.initial\u focus.focus\u set()

AttributeError:“tuple”对象没有attributeattribute“focus\u set”


如果我注释掉“returnthing1,thing2”行,我不会得到这个错误。但是,我仍然需要从弹出框返回变量。为什么会这样

body方法应该返回应该获得焦点的小部件。这就是为什么会出现这样的错误:tkinter试图将焦点放在应该是小部件的东西上,而不是元组。在您的情况下,您可能希望返回
self.t1

为了能够获取对话框的值,您需要定义方法
apply
,该方法应将值保存到
self.result
。然后,您可以在对话框关闭时查询结果

d = MyDialog(root)
root.wait_window(d.top)
print("the value is %s" % d.result)

这里有一个更完整的示例:

我们可以编辑完整堆栈跟踪吗?以包含完整堆栈trace@Slayer我对这有点陌生,所以我现在知道了。有没有一种有效的方法可以从弹出窗口的输入框中提取值,基于使用Tkinter的
grid
构建的GUI?注意——这并没有改变,但是,当PopuBox第一次打开时,我仍然得到上面的AttributeError——这正是我所需要的。我消除了
return
命令,该命令消除了错误。这3行代码提供了我想要的输出,谢谢@丁戈杰:你不应该消除回报,而是要解决它。这是有目的的,我很兴奋<添加了代码>返回,即使在内核重新启动后,解决方案也能很好地工作!多谢各位。