在wxPython中嵌入多个matplotlib图形
我在一个面板中有一个2x2在wxPython中嵌入多个matplotlib图形,python,matplotlib,wxpython,Python,Matplotlib,Wxpython,我在一个面板中有一个2x2FlexGridSizer,我想同时插入四个不同的matplotlib图形及其自己的工具栏 我已经看到了许多嵌入一个图形的链接和工作示例,但由于我是wxPython和OOP的乞丐,所以在测试一些代码并试图将它们与我的代码合并时,我会感到非常困惑 这是一个wx.Notebook的页面类,我想把数字放在这里 class Pagina(wx.Panel): def __init__(self, parent): wx.Panel.__init__(se
FlexGridSizer
,我想同时插入四个不同的matplotlib图形及其自己的工具栏
我已经看到了许多嵌入一个图形的链接和工作示例,但由于我是wxPython和OOP的乞丐,所以在测试一些代码并试图将它们与我的代码合并时,我会感到非常困惑
这是一个wx.Notebook
的页面类,我想把数字放在这里
class Pagina(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent)
self.boton_descargar = wx.Button(self, -1, label=u"Descargar")
self.boton_desconectar = wx.Button(self, -1, label=u"Desconectar")
sizer = wx.BoxSizer(wx.VERTICAL)
subsizer1 = wx.BoxSizer(wx.HORIZONTAL)
subsizer2 = wx.FlexGridSizer(rows=2, cols=2)
sizer.Add(subsizer1, 0, wx.EXPAND | wx.ALL, 0)
sizer.Add(subsizer2, 1, wx.EXPAND | wx.ALL, 0)
sizer.Add(self.boton_desconectar, 0, wx.ALIGN_RIGHT | wx.RIGHT, 10)
subsizer1.Add(self.boton_descargar, 0, wx.ALL, 10)
self.Bind(wx.EVT_BUTTON, self.onClick_descargar, self.boton_descargar)
self.Bind(wx.EVT_BUTTON, self.onClick_desconectar, self.boton_desconectar)
self.SetSizer(sizer)
def onClick_descargar(self, event):
HiloDescarga()
def onClick_desconectar(self, event):
pass
HiloDescarga
实际上是一个启动的线程,用于下载一些文本行、处理数据并以这种方式绘图(第四个图是相同的):
因此,这些数字只是在单独的窗口中弹出。如果你能给我一个片段或至少一些方向,也许对绘图代码做一些修改,我不知道。欢迎您提供任何帮助。您只需遵循示例,其中嵌入了一个图形,而是为要创建的每个图形实例化多个成员。 下面是一个简单的例子:
import matplotlib
matplotlib.use('WXAgg')
from matplotlib.figure import Figure
from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigureCanvas
import wx
class MyFrame(wx.Frame):
def __init__(self, parent, nbFigures=4):
super(MyFrame, self).__init__(parent)
sizer = wx.BoxSizer(wx.VERTICAL)
self.figs = [Figure(figsize=(2,1)) for _ in range(nbFigures)]
self.axes = [fig.add_subplot(111) for fig in self.figs]
self.canvases = [FigureCanvas(self, -1, fig) for fig in self.figs]
for canvas in self.canvases:
sizer.Add(canvas, 0, wx.ALL, 5)
self.SetSizer(sizer)
app = wx.App()
frm = MyFrame(None)
frm.Show()
app.MainLoop()
我保存了数组self.figs
中每个人物的实例,以及self.axes
希望这能让您走上正确的道路您只需遵循示例,其中嵌入了一个图形,而不是为要创建的每个图形实例化多个成员。 下面是一个简单的例子:
import matplotlib
matplotlib.use('WXAgg')
from matplotlib.figure import Figure
from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigureCanvas
import wx
class MyFrame(wx.Frame):
def __init__(self, parent, nbFigures=4):
super(MyFrame, self).__init__(parent)
sizer = wx.BoxSizer(wx.VERTICAL)
self.figs = [Figure(figsize=(2,1)) for _ in range(nbFigures)]
self.axes = [fig.add_subplot(111) for fig in self.figs]
self.canvases = [FigureCanvas(self, -1, fig) for fig in self.figs]
for canvas in self.canvases:
sizer.Add(canvas, 0, wx.ALL, 5)
self.SetSizer(sizer)
app = wx.App()
frm = MyFrame(None)
frm.Show()
app.MainLoop()
我保存了数组self.figs
中每个人物的实例,以及self.axes
希望这能让你走上正轨我马上就来试试。不过我有一个疑问。为绘图任务启动新线程是一个好主意吗?我的独立绘图脚本需要一段时间才能完成。对不起,这对你真的没有帮助。我马上就来试试。不过我有一个疑问。为绘图任务启动新线程是一个好主意吗?我的独立绘图脚本需要一段时间才能完成。很抱歉,无法真正帮助您