在backend file backend_wx.py
中,您可以看到matplotlib直接繪製到窗口上以及之前創建的按鈕上。你所要做的是一個觸發重繪該按鈕後,提請圖形來代替draw
方法:
fig = figure()
but = Button(fig.canvas, label="button")
original_draw = fig.canvas.draw
def draw(gc=None):
original_draw(gc)
but.SetLabel(but.GetLabel())
fig.canvas.draw = draw
plot([1],[1])
我用but.SetLabel(but.GetLabel())
迫使按鈕的重繪。使用wx.PostEvent
發送適當的繪畫事件也應該如此。如果您有多個控件並且不想畫出所有控件,因爲調整大小可以解決問題,您可以使用SendSizeEvent()
來觸發重繪。您必須添加一些機制來防止無限循環,因爲大小事件處理程序再次調用draw
。
的最好的解決方案可能是寫一個自己的matplotlib的後端,一個不拉進主窗口,但到畫布的孩子,這樣的GUI工具包可以處理繪製順序。但這也是最涉及的解決方案。文檔中包含有關該主題的一些信息,您可能也會發現已經提到的backend_wx.py
有幫助。順便說一下:如果按鈕不需要放在畫布上,也可以通過gcf().canvas.toolbar
將它添加到工具欄中。