मैं समझ नहीं पा रहा हूं कि FigCanvasWxAgg उदाहरण को रीफ्रेश कैसे करें।matplotlib: figure.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.VERTICAL)
self.figure = Figure(figsize=(1,2))
self.axe = self.figure.add_subplot(111)
self.figurecanvas = FigureCanvas(self, -1, self.figure)
self.buttonPlot = wx.Button(self, wx.NewId(), "Plot")
self.buttonClear = wx.Button(self, wx.NewId(), "Clear")
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.buttonClear, proportion=0, border=2, flag=wx.ALL)
self.SetSizer(self.sizer)
self.figurecanvas.Bind(wx.EVT_LEFT_DCLICK, self.on_dclick)
self.buttonPlot.Bind(wx.EVT_BUTTON, self.on_button_plot)
self.buttonClear.Bind(wx.EVT_BUTTON, self.on_button_clear)
self.subframe_opened = False
def on_dclick(self, evt):
self.subframe = SubFrame(self, self.figure)
self.subframe.Show(True)
self.subframe_opened = True
def on_button_plot(self, evt):
self.axe.plot(range(10), color='green')
self.figurecanvas.draw()
def on_button_clear(self, evt):
if self.subframe_opened:
self.subframe.Close()
self.figure.set_canvas(self.figurecanvas)
self.axe.clear()
self.figurecanvas.draw()
class SubFrame(wx.Frame):
def __init__(self, parent, figure):
wx.Frame.__init__(self, parent, wx.NewId(), "Sub")
self.sizer = wx.BoxSizer(wx.VERTICAL)
self.figurecanvas = FigureCanvas(self, -1, figure)
self.sizer.Add(self.figurecanvas, proportion=1, border=5, flag=wx.ALL | wx.EXPAND)
self.SetSizer(self.sizer)
self.Bind(wx.EVT_CLOSE, self.on_close)
def on_close(self, evt):
self.GetParent().subframe_opened = False
evt.Skip()
class MyApp(wx.App):
def OnInit(self):
frame = MainFrame()
frame.Show(True)
self.SetTopWindow(frame)
return True
app = MyApp(0)
app.MainLoop()
मैं आपरेशन के निम्न क्रम में दिलचस्पी रखता हूँ:
- रन एक स्क्रिप्ट
- मुख्य फ़्रेम का आकार बदलने
- प्रेस प्लॉट बटन
- डबल क्लिक करें यहाँ उदाहरण है साजिश पर
- साफ़ करें बटन
अब मुझे मुख्य फ्रेम प्लॉट पर गड़बड़ है। अगर मैं फ्रेम का आकार बदलता हूं तो यह ठीक से ठीक हो जाता है। मेरा सवाल यह है कि मैं अपने कोड में आकार बदलने के बिना क्या करना चाहिए?
http://img227.imageshack.us/img227/5407/mess.png
अग्रिम धन्यवाद:
एक "गंदगी" मैं कुछ इस तरह मतलब है।
@ एलेक्स, मुझे यकीन नहीं है कि आप क्या पूछ रहे हैं, "गड़बड़" से आपका क्या मतलब है? मैंने आपके कोड की कोशिश की और मुझे कोई समस्या नहीं दिखाई दे रही है। मुख्य फ्रेम ठीक आकार बदलता है, बटन साजिश खींचता है, डबल-क्लिक एक नया फ्रेम बनाता है जो एक ही आकृति कैनवास को मुख्य के रूप में दिखाता है, स्पष्ट बटन साजिश को साफ़ करता है और उप-फ्रेम को बंद करता है। – Mark
हम्म .. यह अजीब है, मैंने स्पष्ट के बाद राज्य के साथ तस्वीर जोड़ा। – Alex
मैंने मूल रूप से लिनक्स पर कोशिश की, विंडोज़ के तहत मैं आपकी तस्वीर को पुन: उत्पन्न कर सकता हूं। ऐसा इसलिए है क्योंकि आप अपनी आकृति वस्तु को दो wxFrames (शायद एक अच्छा विचार नहीं) के बीच साझा कर रहे हैं। अगर कोई मुझे इससे दांव नहीं देता है, तो मैं इस शाम को नज़दीकी रूप से देखूंगा। – Mark