wxPython通过按钮事件用另一个图刷新一个图
wxPython Refresh a plot with another graph by a button event
我设置了一个完整的 GUI,我已经设置了没有内容的情节。
我有一个计算绘图内容所需的参数列表。
图表应该一键绘制。也应该可以通过更改参数绘制不同的图形。
所以按下按钮并绘制图表不应该是一次性事件。
我使用了 matplot.figurecanvas 作为绘图,但任何替代方法也有帮助。
到目前为止,我尝试了很多不同的方法,但没有任何效果。
有人可以帮忙吗?
在您的按钮事件中,您必须清除图形,绘制新数据并重新绘制 canvas。
这是一个简单的例子:
import wx
import matplotlib
from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigureCanvas
from matplotlib.figure import Figure
class MainFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, wx.NewId(), "Main")
self.sizer = wx.BoxSizer(wx.HORIZONTAL)
self.figure = Figure(figsize=(1,2))
self.axe = self.figure.add_subplot(111)
self.figurecanvas = FigureCanvas(self, -1, self.figure)
self.valueCtrl = wx.TextCtrl(self, -1, "")
self.buttonPlot = wx.Button(self, wx.NewId(), "Plot")
self.sizer.Add(self.figurecanvas, proportion=1, border=5,
flag=wx.ALL | wx.EXPAND)
self.sizer.Add(self.buttonPlot, proportion=0, border=2, flag=wx.ALL)
self.sizer.Add(self.valueCtrl, proportion=0, border=2, flag=wx.ALL)
self.SetSizer(self.sizer)
self.buttonPlot.Bind(wx.EVT_BUTTON, self.on_button_plot)
def on_button_plot(self, evt):
self.figure.set_canvas(self.figurecanvas)
self.axe.clear()
self.axe.plot(range(int(self.valueCtrl.GetValue())), color='green')
self.figurecanvas.draw()
class MyApp(wx.App):
def OnInit(self):
frame = MainFrame()
frame.Show(True)
self.SetTopWindow(frame)
return True
app = MyApp(0)
app.MainLoop()
希望对您有所帮助。
我设置了一个完整的 GUI,我已经设置了没有内容的情节。 我有一个计算绘图内容所需的参数列表。
图表应该一键绘制。也应该可以通过更改参数绘制不同的图形。 所以按下按钮并绘制图表不应该是一次性事件。
我使用了 matplot.figurecanvas 作为绘图,但任何替代方法也有帮助。
到目前为止,我尝试了很多不同的方法,但没有任何效果。
有人可以帮忙吗?
在您的按钮事件中,您必须清除图形,绘制新数据并重新绘制 canvas。
这是一个简单的例子:
import wx
import matplotlib
from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigureCanvas
from matplotlib.figure import Figure
class MainFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, wx.NewId(), "Main")
self.sizer = wx.BoxSizer(wx.HORIZONTAL)
self.figure = Figure(figsize=(1,2))
self.axe = self.figure.add_subplot(111)
self.figurecanvas = FigureCanvas(self, -1, self.figure)
self.valueCtrl = wx.TextCtrl(self, -1, "")
self.buttonPlot = wx.Button(self, wx.NewId(), "Plot")
self.sizer.Add(self.figurecanvas, proportion=1, border=5,
flag=wx.ALL | wx.EXPAND)
self.sizer.Add(self.buttonPlot, proportion=0, border=2, flag=wx.ALL)
self.sizer.Add(self.valueCtrl, proportion=0, border=2, flag=wx.ALL)
self.SetSizer(self.sizer)
self.buttonPlot.Bind(wx.EVT_BUTTON, self.on_button_plot)
def on_button_plot(self, evt):
self.figure.set_canvas(self.figurecanvas)
self.axe.clear()
self.axe.plot(range(int(self.valueCtrl.GetValue())), color='green')
self.figurecanvas.draw()
class MyApp(wx.App):
def OnInit(self):
frame = MainFrame()
frame.Show(True)
self.SetTopWindow(frame)
return True
app = MyApp(0)
app.MainLoop()
希望对您有所帮助。