我想將matplotlib集成到wxpython GUI中,並且我已經獲得了交互式導航工具欄以成功顯示。但是,按下任何按鈕不會改變繪圖,如果您重新調整窗口的大小或者按下另一個按鈕(即縮放)並應用相關操作(選擇),繪圖僅會更改(基於上次按下的按鈕)一個盒子/區域)。我嘗試在網上查找,但大多數答案要麼沒有回答這個具體問題,要麼沒有回答那些看起來像他們匹配我的查詢的問題。以下是相關代碼的一部分:Matplotlib和WxPython - 交互式工具欄Plot沒有做點擊刷新/更新
忽略所有無數更新/刷新調用,我只是試圖讓框架/繪圖刷新,但它不起作用。有任何想法嗎?
class p1(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent, -1, size=(50,50))
#Set up Figure
self.figure = matplotlib.figure.Figure()
self.canvas = FigureCanvas(self, -1, self.figure)
#Set up Matplotlib Toolbar
self.chart_toolbar = NavigationToolbar2Wx(self.canvas)
tw,th = self.chart_toolbar.GetSizeTuple()
fw,fh = self.canvas.GetSizeTuple()
self.chart_toolbar.SetSize(wx.Size(fw, th))
self.chart_toolbar.Realize()
graphs_sizer = wx.BoxSizer(wx.VERTICAL)
graphs_sizer.Add(self.canvas, 20, flag=wx.EXPAND, border=5)
graphs_sizer.Add(self.chart_toolbar, 1, flag=wx.ALIGN_CENTER, border=5)
self.SetSizer(graphs_sizer)
self.chart_toolbar.update()
self.canvas.Update()
self.canvas.Refresh()
self.Update()
def plot(self):
self.axes = self.figure.add_subplot(111)
self.axes.plot(aggregatePlot,color='blue',alpha=0.6,lod=True)
self.canvas.draw()
self.canvas.Update()
self.canvas.Refresh()
class TestFrame(wx.Frame):
def __init__(self, parent, title):
wx.Frame.__init__(self, parent, title=title, size=(200,200))
#Create Splitter Window and Add Left/Right Panels
self.sp = wx.SplitterWindow(self)
self.p1 = p1(self.sp)
self.p2 = wx.Panel(self.sp, style=wx.SUNKEN_BORDER)
self.sp.SplitVertically(self.p1, self.p2, 100)
#Create Buttons
self.siButton = wx.Button(self.p1, -1, "Si", size=(40,20), pos=(10,10))
self.siButton.Bind(wx.EVT_BUTTON, self.Si)
self.siButton = wx.Button(self.p2, -1, "No", size=(40,20), pos=(10,10))
self.siButton.Bind(wx.EVT_BUTTON, self.No)
#Create Status Bar
self.statusbar = self.CreateStatusBar()
self.statusbar.SetStatusText("Hola")
#Plot
self.p1.plot()
#Event Handlers
def Si(self, event):
self.statusbar.SetStatusText("Si")
def No(self, event):
self.statusbar.SetStatusText("No")
app = wx.App(redirect=False)
frame = TestFrame(None, 'Hello World!')
frame.Show(True)
frame.p1.plot()
frame.p1.canvas.Update()
frame.p1.canvas.Refresh()
app.MainLoop()
一個例子如下所示,變焦按鈕被按下並且被選擇用於變焦的矩形區域,但沒有任何反應。縮放矩形也有很多小的內部矩形,但實際的圖形不會改變。
example of issue http://i59.tinypic.com/28beiq8.png
我不知道你到底在想什麼:你正在繪製**一次**,所以你爲什麼會期望繪圖改變(除了縮放/縮放)?更好地說,你繪製了兩次,但第二個''frame.p1.plot()''是一個空操作,因爲''aggregatePlot''不應該改變。 – nepix32 2015-03-03 08:02:34
對不起,也許我沒有正確解釋,我覺得是錯誤的一個例子是,我點擊縮放按鈕,選擇一個矩形區域放大的情節。現在從我所知道的matplotlib中,情節應該變成放大的區域。現在什麼都沒有發生。之後,如果我選擇平移並移動一點,或者調整整個繪圖的大小,那麼圖形會變成之前放大的位置,然後發生平移動作。那有意義嗎? – 2015-03-03 17:41:25
沒關係,請看下面的答案,可能是我的matplotlib版本有問題,更新修復了它。 – 2015-03-03 18:07:48