首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >后端冲突?

后端冲突?
EN

Stack Overflow用户
提问于 2012-03-20 23:30:16
回答 2查看 2.1K关注 0票数 2

我是python的新手,但我花了最后一周的时间尝试编写一个软件来可视化一些编织的东西。

基本的电影效果是:用户将所有需要的信息输入到GUI中,然后单击proceed,我有另一个强大的功能来生成所有的图形。

这是有效的,但问题是,当我运行该函数时,大约持续了2分钟,tkinter窗口冻结。我读到我应该使用线程。然后我发现了这个:,http://uucode.com/texts/pylongopgui/pyguiapp.html,这是一个例子,基本上做了我想做的事情,再加上其他一些事情。

我现在正在尝试调整我的代码,使其适合这一点。

这就是我的问题:一切似乎都很好,除了在我的函数中有一个叫做"tk“的新窗口弹出,所有的东西都冻结了。

在这一刻,一切都冻结了:

代码语言:javascript
复制
# 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直接运行它时,一切都很好,所以我不知道是什么导致了这个问题。

我还试着用无限循环替换这段代码,如下所示:

代码语言:javascript
复制
i=1
while i > 0:
    i=i+1
    print(i)

这是有效的,没有任何东西是冻结的。但后来我试了一下:

代码语言:javascript
复制
i=1
while i > 0:
    i=i+1
    plt.plot((i,i))

一切都冻结了,弹出名为"tk“的窗口并立即冻结。

我在某处读到这可能是一个冲突,Tkinter和matplotlib后端,但仅此而已,这对我帮助不大。

编辑:我不知道这是否有帮助,但我使用的是Python Portble 2.7.2.1

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-21 00:51:57

我不能写评论,但有几件事需要检查:

  • 在python cmdline上,尝试绘制一个非常简单的图形。E.g.:import pyplot >>> pyplot.plot(1,3,1,3,1)

我的猜测是,这将显示一个TK窗口,但随后会停止。

  • 看看Tkinter是否真的能用。尝试导入example:import Tkinter._test()

>>> _tkinter >>> Tkinter

最后一个命令应该会显示一个带有按钮的小窗口。

而且,你并没有真正指定你所谓的“冻结”是什么意思:

up system lock up completely?

  • does
  • lock up?(您的系统是否锁定脚本锁定?或者,您是否可以关闭窗口并简单地停止脚本?
  • 正在绘制某个内容,或者只是弹出一个空的TK窗口?

另一方面,由于您提到了线程,因此可能会遇到一般的GUI问题: GUI等待用户输入。如果你想让它等待,同时进行计算,后者确实必须在一个单独的线程中。同样,如果您想在每次计算出新图形时更新您的图形,则不需要这样做。例如,参见http://matplotlib.sourceforge.net/examples/animation/simple_anim_tkagg.html

最后,如果您指定您的操作系统,如果涉及到调试您的设置,那么它可能会有所帮助。我假设Python Portble是可移植的Python。

票数 3
EN

Stack Overflow用户

发布于 2018-05-27 06:42:54

在打开Tkinter窗口之前尝试关闭matplotlib绘图:

代码语言:javascript
复制
plt.close()
tk = Tkinter()
...

这对我很管用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9789777

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档