我对python很陌生但是我上周花了一些时间来尝试编写一个软件来想象一些非常糟糕的东西。
基本的电影是:用户输入GUI中所需的所有信息,然后点击继续,我还有另一个重要功能来生成所有图形。
这是有效的,但问题是当我运行这个持续2分钟的功能时,tkinter窗口冻结了。我读到我应该使用线程。 然后我发现了这个:http://uucode.com/texts/pylongopgui/pyguiapp.html 这是一个基本做我想要的事情以及其他一些事情的例子。
我现在正在尝试调整我的代码以使其适合这一点。
这是我的问题:一切似乎都运行正常,只是在我的函数中有一个时刻会出现一个名为“tk”的新窗口,一切都会冻结。
此刻一切都冻结了:
# On trace les fils de chaine
for i in range(0, Couches_Trame + 1):
t = np.arange(0, np.pi, 0.1)
plt.figure(i)
plt.title('Plan de Trame ' + str(i+1), fontsize = '16')
ax = plt.gca()
ax.yaxis.set_visible(False)
ax.xaxis.set_visible(False)
plt.axis([-1, Plans, Fils_Chaine + 1, -1])
for j in range(0,Plans):
for k in range(0,Fils_Chaine):
plt.fill_between(np.cos(t)/8+j, np.sin(t+np.pi)/8+k+0.5, \
np.sin(t)/8+k+0.5, color='r')
plt.savefig('Blabla'+int(i))
plt.figure(Couches_Trame)
plt.title('Plan de Trame: Projection')
当我在不使用Tkinter的情况下直接运行它时,一切正常,所以我不知道是什么导致了这一点。
此外,我尝试用以下无限循环替换这段代码:
i=1
while i > 0:
i=i+1
print(i)
这很有效,没有什么是冻结的。但后来我尝试了这个:
i=1
while i > 0:
i=i+1
plt.plot((i,i))
一切都冻结了,窗口叫“tk”弹出并立即冻结。
我在某处读到这可能是Tkinter和matplotlib后端的冲突,但这就是全部,这对我没什么帮助。
编辑:我不知道这是否有帮助,但我使用的是Python Portble 2.7.2.1
答案 0 :(得分:3)
我不能写评论,但有几件事要检查:
,尝试绘制一个非常简单的图形。 E.g:
>>> import pyplot
>>> pyplot.plot([1,3,1,3,1])
我的猜测是,这会显示一个传统知识窗口,但随后会失速。
看看Tkinter是否真的有效。试着举个例子:
>>> import Tkinter
>>> import _tkinter
>>> Tkinter._test()
最后一个命令应该显示一个带按钮的小窗口。
另外,你并没有真正指定“冻结”的含义:
你的系统完全锁定了吗?
脚本是否锁定?或者你可以关闭窗口,脚本会停止吗?
是绘制的东西,还是只弹出一个空的TK窗口?
另一方面,由于您提到线程,您可能遇到了一般的GUI问题:GUI等待用户输入。如果你想让它等待,并且同时进行计算,后者确实必须在一个单独的线程中。然后,如果您想在每次计算新数字时更新图表,则不应该有任何需要。参见例如http://matplotlib.sourceforge.net/examples/animation/simple_anim_tkagg.html
最后,如果您指定操作系统,它可能有所帮助,如果它涉及到调试您的设置。我假设Python Portble是Portable Python。
答案 1 :(得分:0)
在打开Tkinter窗口之前尝试关闭matplotlib绘图:
plt.close()
tk = Tkinter()
...
它对我有用。