Python Tkinter can';我甚至连一个简单的;按钮“;
从简单的Tkinter课程开始,即使简单的代码不起作用,我也会陷入困境:Python Tkinter can';我甚至连一个简单的;按钮“;,python,python-3.x,tkinter,anaconda,Python,Python 3.x,Tkinter,Anaconda,从简单的Tkinter课程开始,即使简单的代码不起作用,我也会陷入困境: import tkinter as tk root = tk.Tk() b = tk.Button(root, text='button'); b.pack() 我试图从conda:conda安装-c anaconda tk更新tk,但没有任何变化。我想你忘了在末尾添加root.mainloop() import tkinter as tk root = tk.Tk() b = tk.Button(root, te
import tkinter as tk
root = tk.Tk()
b = tk.Button(root, text='button'); b.pack()
我试图从conda:
conda安装-c anaconda tk
更新tk
,但没有任何变化。我想你忘了在末尾添加root.mainloop()
import tkinter as tk
root = tk.Tk()
b = tk.Button(root, text='button'); b.pack()
root.mainloop()
我能够重现错误的唯一方法是直接在空闲Shell中构建代码,并关闭在创建按钮之前弹出的根窗口 也就是说,像这样在Shell中编写GUI是非常奇怪的。如果不关闭tkinter窗口,代码工作正常。但是,GUI开发应该在编辑器中的
.py
文件中完成,并一次性运行。简单的修复方法是在添加GUI中的所有其他内容之前不关闭根窗口
正确的解决方法是在.py
文件中构建GUI,然后运行它
我不知道你为什么说编辑不为你工作。当我复制您的确切代码时,它在我这边工作得很好:
所有这些都表明,您确实不需要在Python空闲环境中构建代码。最好使用PyCharm或Eclipse/PyDev之类的工具。这些是我的IDE工具
关于Python的IDLE,需要注意的一点是,在保存.py
文件之前,它不会从编辑器中运行代码
虽然Python空闲时不是100%需要mainloop()
,但tkinter需要它才能正常工作。除了Python的空闲环境之外,大多数其他IDE环境都需要mainloop()
,因此最好总是包含它
import tkinter as tk
root = tk.Tk()
b = tk.Button(root, text='button')
b.pack()
root.mainloop()
在添加按钮之前不要关闭窗口。如果您使用Python的默认空闲,那么运行tkinter应用程序不需要mainloop,但是最好明确定义mainloop,因为空闲之外的任何地方没有它都无法工作。我注意到您使用的是
anaconda
。你的问题很有可能是由于这个事实。众所周知,Anaconda与tkinter之间存在问题,因为它们的自定义库经常失败。@Searge No,这个问题可以用任何python解释器复制,在调用mainloop
之前都会引发异常,因此anaconda和mainloop
都与此无关。@Goyo我不确定在添加按钮之前关闭窗口是什么意思。这在提供的代码中是不可能的。所有的代码都是在init上运行的,那么如何在添加按钮之前关闭窗口呢?即使直接在解释器中编写此代码(大多数人都不会这么做),在我这方面仍然可以正常工作。不,这个错误在mainloop()之前就出现了。此外,在《儿童Python》一书中的示例(我从这里开始学习该课程)中,根本没有.mainloop()
,只有.pack()
是的,它可以作为脚本使用,但我甚至不能在IDLE中定义变量,而且,Jason Briggs的示例中没有一个可以使用.thnx。如果您愿意,还可以添加,调用.pack()
函数后需要.mainloop()
。当我在编辑器上从书中复制时,我遇到了这个问题。@Seargemainloop()
在Python IDLE中是不需要的。pythonidle为您假定mainloop。但在大多数其他IDE中并非如此。我是说我开始在IDE上复制。它不工作(因为mainloop),所以我转到文档并在python控制台上复制它,在那里关闭那个空窗口ツ
import tkinter as tk
root = tk.Tk()
b = tk.Button(root, text='button'); b.pack()
root.mainloop()
import tkinter as tk
root = tk.Tk()
b = tk.Button(root, text='button')
b.pack()
root.mainloop()