如何从wxPython Gui从同一个按钮打开两个不同的pylab图形?

2024-10-01 11:28:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我是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完成,因此在单击按钮时不能再次调用它,除非图形关闭。但这就是我实现不同线程的原因。虽然它似乎不起作用。在


Tags: 函数selfevent图形distdefshowwxpython
3条回答

如果要在wxPython中创建饼图或其他类型的图形,那么应该使用PyPlot(包含在wx中)或matplotlib,它们可以嵌入到wxPython中。wxPython演示有一个PyPlot示例。有关matplot,请参见herehere。在

在导入pylab之后尝试发出命令pylab.ion(),看看这是否允许您显示多个绘图。当我需要在不关闭窗口的情况下反复显示更新的绘图时,这一直是我的方法。在

否则,您将需要为每个新的图形窗口创建不同的图形。在

例如,以下代码为我生成两个具有不同绘图的窗口:

 import pylab
 pylab.ion()

 fig1 = pylab.figure()
 fig1.add_subplot(111).plot([1,2],[3,4])
 pylab.draw()

 fig2 = pylab.figure()
 fig2.add_subplot(111).plot([5,6],[10,9])
 pylab.draw()

添加

考虑到您的后续注释,这里有一个新的脚本,它确实使用show(),但是每次调用pylab.draw()时,它都会显示不同的绘图,并使绘图窗口无限期显示。它使用简单的输入逻辑来决定何时关闭图形(因为使用show()意味着pylab不会处理windowsx按钮上的点击),但这应该很容易作为另一个按钮或文本字段添加到gui中。在

^{pr2}$

请参阅this page以获取关于让pylab使用wxPython的建议,您可能不应该真正尝试(参见下一段)。问题是pylab使用的Tkinter与wxPython的运行副本不兼容。在

最终,您应该embed your plots in wxPython。这是非常好的工作,是一个更好的用户体验无论如何。在

相关问题 更多 >