Anaconda 水蟒Spyder下tkinter的破坏问题

Anaconda 水蟒Spyder下tkinter的破坏问题,anaconda,ipython,spyder,Anaconda,Ipython,Spyder,在下面的程序中,我可以使用关闭按钮关闭窗口,但既不能使用“Esc”绑定,也不能使用按钮回调。我被送到了IPython控制台,但窗口仍停留在这里,有一个旋转的轮子!在码头或与水蟒闲置时工作正常。我使用Mac、High Sierra、Anaconda和Spyder的最新版本(IPython 7.1.1、Spyder 3.3.2)。我怀疑斯派德有问题 from tkinter import * class Myapp(object): def __init__(self): s

在下面的程序中,我可以使用关闭按钮关闭窗口,但既不能使用“Esc”绑定,也不能使用按钮回调。我被送到了IPython控制台,但窗口仍停留在这里,有一个旋转的轮子!在码头或与水蟒闲置时工作正常。我使用Mac、High Sierra、Anaconda和Spyder的最新版本(IPython 7.1.1、Spyder 3.3.2)。我怀疑斯派德有问题

from tkinter import *
class Myapp(object):
    def __init__(self):
        self.root = Tk()
        self.root.geometry('150x100+1+1')
        self.root.title('Root')
        self.root.bind('<Escape>', lambda e: self.root.destroy())
        self.button = Button(self.root, text='End Program', command=self.end)
        self.button.place(x=10, y=45)
        self.L = [1,2,3]   # result of an omitted computation
    def end(self):
        self.root.destroy()
app = Myapp()
app.root.mainloop()
print(app.L)
从tkinter导入*
类Myapp(对象):
定义初始化(自):
self.root=Tk()
self.root.geometry('150x100+1+1')
self.root.title('root'))
self.root.bind(“”,lambda e:self.root.destroy())
self.button=button(self.root,text='End Program',command=self.End)
自身按钮位置(x=10,y=45)
self.L=[1,2,3]#省略计算的结果
def端(自身):
self.root.destroy()
app=Myapp()
app.root.mainloop()
印刷品(附录一)
有什么提示吗?谢谢。

(此处为Spyder maintainer)您有两个选项可以让代码在Spyder中工作:

  • 工具>首选项>IPython控制台>图形

    并停用名为“激活支持”的选项。然后在运行代码之后,它会阻塞控制台,但不会有任何其他问题

  • 如果在中选择了
    Tk
    作为后端

    工具>首选项>IPython控制台>图形

    然后您需要从代码中删除
    app.root.mainloop()
    ,因为使用我们的首选项会创建一个Tk事件循环,这样您的代码就不会阻塞控制台,这使得
    app.root.mainloop()
    变得不必要


  • 不,我很抱歉,但在家里,这些解决方案都不起作用。解决方案1工作了一次,但之后不再工作,即使在重新启动Spyder时也是如此。解决方案2不显示窗口并立即打印[1,2,3],而且我的代码应该在“任何地方”运行,不是吗?我应该补充一点,这是一个在web上找到的测试代码,它在IDLE、PyCharm、Atom、Terminal中运行。。。这是一本即将出版的书…也许是我写的。有人用Mac High Sierra、Anaconda Python和Spyder的最新版本试过吗?