我是python新手,我有一个无法克服的严重问题。我使用wxpython创建了一个gui,它有两个文本字段和一个按钮。当按下此按钮时,我调用一个函数,该函数调用另一个函数,该函数根据文本框中的输入创建饼图。问题是,如果用户不关闭图形并在文本框中输入新值并再次按下按钮,程序将崩溃而不是显示第二个图形。我试着创建不同的线程时,按钮按下,结果是一样的。在
更具体地说:
以下是单击按钮时调用的函数:
def statistics_按钮(self,event):
t=threading.Thread(target=self.m_button21OnButtonClick,args=(event,))
t.start()
print t
def m_button21OnButtonClick( self, event ):
'''some code here'''
fig=statistics.mmr_dist(mmr1,mmr2)
show()
首先调用statistics_按钮,然后调用m_按钮211onbuttonclick。 这个统计.mmr_dist功能如下:
^{pr2}$到目前为止,我已经了解到show()命令会阻止函数m\u button211onbuttonclick完成,因此在单击按钮时不能再次调用它,除非图形关闭。但这就是我实现不同线程的原因。虽然它似乎不起作用。在
如果要在wxPython中创建饼图或其他类型的图形,那么应该使用PyPlot(包含在wx中)或matplotlib,它们可以嵌入到wxPython中。wxPython演示有一个PyPlot示例。有关matplot,请参见here或here。在
在导入pylab之后尝试发出命令
pylab.ion()
,看看这是否允许您显示多个绘图。当我需要在不关闭窗口的情况下反复显示更新的绘图时,这一直是我的方法。在否则,您将需要为每个新的图形窗口创建不同的图形。在
例如,以下代码为我生成两个具有不同绘图的窗口:
添加
考虑到您的后续注释,这里有一个新的脚本,它确实使用
^{pr2}$show()
,但是每次调用pylab.draw()
时,它都会显示不同的绘图,并使绘图窗口无限期显示。它使用简单的输入逻辑来决定何时关闭图形(因为使用show()
意味着pylab不会处理windowsx按钮上的点击),但这应该很容易作为另一个按钮或文本字段添加到gui中。在请参阅this page以获取关于让pylab使用wxPython的建议,您可能不应该真正尝试(参见下一段)。问题是pylab使用的Tkinter与wxPython的运行副本不兼容。在
最终,您应该embed your plots in wxPython。这是非常好的工作,是一个更好的用户体验无论如何。在
相关问题 更多 >
编程相关推荐