Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.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 Tkinter can';我甚至连一个简单的;按钮“;_Python_Python 3.x_Tkinter_Anaconda - Fatal编程技术网

Python Tkinter can';我甚至连一个简单的;按钮“;

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

从简单的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, 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()
。当我在编辑器上从书中复制时,我遇到了这个问题。@Searge
mainloop()
在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()