我是python的新手,但我花了最后一周的时间尝试编写一个软件来可视化一些编织的东西。
基本的电影效果是:用户将所有需要的信息输入到GUI中,然后单击proceed,我有另一个强大的功能来生成所有的图形。
这是有效的,但问题是,当我运行该函数时,大约持续了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
发布于 2012-03-21 00:51:57
我不能写评论,但有几件事需要检查:
我的猜测是,这将显示一个TK窗口,但随后会停止。
>>> _tkinter >>> Tkinter
最后一个命令应该会显示一个带有按钮的小窗口。
而且,你并没有真正指定你所谓的“冻结”是什么意思:
up system lock up completely?
另一方面,由于您提到了线程,因此可能会遇到一般的GUI问题: GUI等待用户输入。如果你想让它等待,同时进行计算,后者确实必须在一个单独的线程中。同样,如果您想在每次计算出新图形时更新您的图形,则不需要这样做。例如,参见http://matplotlib.sourceforge.net/examples/animation/simple_anim_tkagg.html
最后,如果您指定您的操作系统,如果涉及到调试您的设置,那么它可能会有所帮助。我假设Python Portble是可移植的Python。
发布于 2018-05-27 06:42:54
在打开Tkinter窗口之前尝试关闭matplotlib绘图:
plt.close()
tk = Tkinter()
...这对我很管用。
https://stackoverflow.com/questions/9789777
复制相似问题