wx.Timer和wx.Frame的问题

时间:2018-10-02 20:18:28

标签: python matplotlib wxpython

我正在尝试制作一个程序,以不断更新我使用的wx.Timer的图形,但是当我使用它时,窗口永远不会出现,但是如果我忽略它,有人可以帮我吗?

有我的密码

class VentanaPrincipal(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self,None,-1,'TSP (Testeo de sensor de posicion)') #titulo del frame
        self.Show()

        # Controles basicos de la grafica
        self.pausa = False
        self.encender = False
        self.escritura = False
    # Controles para la escritura

    self.numfila = 1
    self.tamaAch = 50*1024*1024

    # Creacion del objeto para la obtencion de datos
    self.objetoDatos = ObjetoDatos()

    # Asignacion de los datos a un arreglo
    self.datos = self.objetoDatos.ObtenerDatos()

    self.InitComponents()

    # se inicializa el temporizador de disparo
    self.timerD = wx.Timer(self)
    self.Bind(wx.EVT_TIMER, self.TemporizadorDeDisparo, self.timerD)
    self.timerD.Start(0.00001)

def InitComponents(self):
    self.CreaMenu()
    self.CreaPanel()

def CreaMenu(self):
    self.menubar = wx.MenuBar()
    menuHerramientas = wx.Menu()

    # Opcion Guardar grafica
    self.guardarGrafica = menuHerramientas.Append(1, "&Guardar grafica\tCtrl+G", "Guargar grafica")
    self.Bind(wx.EVT_MENU, self.ReceptorDeEventos, self.guardarGrafica)

    menuHerramientas.AppendSeparator()

    # Opcion salir
    self.salir = menuHerramientas.Append(wx.ID_EXIT, "&Salir\tCtrl+S", "Salir")
    self.Bind(wx.EVT_MENU, self.ReceptorDeEventos, self.salir)

    # Agregamos al menu del la ventana (Frame)
    self.menubar.Append(menuHerramientas,'&Herramientas')
    self.SetMenuBar(self.menubar)

def CreaPanel(self):
    self.panel = wx.Panel(self)

    self.prepararGrafica()

    self.canvas = FigureCanvasWxAgg(self.panel,-1,self.fig)

    self.xmin = CrearEscalas(self.panel, -1, "X min", 0)
    self.xmax = CrearEscalas(self.panel, -1, "X max", 100)
    self.ymin = CrearEscalas(self.panel, -1, "Y min", 0)
    self.ymax = CrearEscalas(self.panel, -1, "Y max", 100)

    # Creacion de la caja que contendra los botones
    self.botonesBox = wx.BoxSizer(wx.HORIZONTAL)

    # Crea el boton encender
    self.botonEncender = wx.Button(self.panel, 2, 'Encender')
    self.Bind(wx.EVT_BUTTON,self.ReceptorDeEventos, self.botonEncender)
    self.botonesBox.Add(self.botonEncender, border = 5, flag=wx.ALL | wx.ALIGN_CENTER_VERTICAL)

    # Crea el boton pausa
    self.botonPausa = wx.Button(self.panel, 3, 'Pausa')
    self.Bind(wx.EVT_BUTTON, self.ReceptorDeEventos, self.botonPausa)
    self.botonesBox.Add(self.botonPausa, border = 5, flag=wx.ALL | wx.ALIGN_CENTER_VERTICAL)

    # Crea el boton excribir
    self.botonEscribir = wx.Button(self.panel, 4, 'Escribir')
    self.Bind(wx.EVT_BUTTON, self.ReceptorDeEventos, self.botonEscribir)
    self.botonesBox.Add(self.botonEscribir, border=5, flag=wx.ALL | wx.ALIGN_CENTER_VERTICAL)

    # Creacion de sizer que contiene los radio button
    self.radioBox = wx.BoxSizer(wx.HORIZONTAL)

    # Agregar radios de CreaEscalas
    self.radioBox.Add(self.xmin, border=5, flag=wx.ALL)
    self.radioBox.Add(self.xmax, border=5, flag=wx.ALL)
    self.radioBox.AddSpacer(24)
    self.radioBox.Add(self.ymin, border=5, flag=wx.ALL)
    self.radioBox.Add(self.ymax, border=5, flag=wx.ALL)

    #Creacion de del sizer que contendra lo anterior
    self.generalBox = wx.BoxSizer(wx.VERTICAL)
    self.generalBox.Add(self.canvas, 1, flag=wx.LEFT | wx.TOP | wx.GROW)
    self.generalBox.Add(self.botonesBox, 0, flag=wx.ALIGN_LEFT | wx.TOP)
    self.generalBox.Add(self.radioBox, 0, flag=wx.ALIGN_LEFT | wx.TOP)

    self.panel.SetSizer(self.generalBox)
    self.generalBox.Fit(self)

def prepararGrafica(self):

    self.dpi = 120
    self.fig = Figure((2.5,2.5),dpi=self.dpi)

    self.axes = self.fig.add_subplot(1,1,1)
    self.axes.set_facecolor('black')
    self.axes.set_title('Information Sensor', size=14)

    pylab.setp(self.axes.get_xticklabels(), fontsize=8)
    pylab.setp(self.axes.get_yticklabels(), fontsize=8)

    # Grafica el primer  arreglo de puntos
    self.plot_data = self.axes.plot(self.datos, linewidth=1, color='blue', )[0]

def GraficarPuntos(self):

    # Auto escala en x
    if self.xmax.ActualizarAuto():
        xmax = len(self.datos)-1
    else:
        xmax = int(self.xmax.ValorManual())
    if self.xmin.ActualizarAuto():
        xmin = 0
    else:
        xmin = int(self.xmin.ValorManual())

    #Auto escala en y
    if self.ymin.ActualizarAuto():
        ymin = round(min(self.datos), 0) - 1
    else:
        ymin = int(self.ymin.ValorManual())

    if self.ymax.ActualizarAuto():
        ymax = round(max(self.datos), 0) + 1
    else:
        ymax = int(self.ymax.ValorManual())

    self.axes.set_xbound(lower=xmin, upper=xmax)
    self.axes.set_ybound(lower=ymin, upper=ymax)

    pylab.setp(self.axes.get_xticklabels(),visible=True)

    self.plot_data.set_xdata(numpy.arange(len(self.datos)))
    self.plot_data.set_ydata(self.datos)

    self.canvas.draw()

def TemporizadorDeDisparo(self, event):
    # if not paused get data
    if not self.pausa:
        self.data = (self.objetoDatos.ObtenerDatos())
    if self.escritura:
        self.EscribirArchivo()

    self.GraficarPuntos()

def EscribirArchivo(self):
    # if time domain data is being written
    # create a file time-domain-data.csv
    ofile = open("time-domain-data%d.csv" % self.numfila, "a")
    writer = csv.writer(ofile, delimiter='\t', quotechar='"',
                        quoting=csv.QUOTE_ALL)

    # while the file size is less than 50 Mb
    while os.path.getsize("time-domain-data%d.csv" %
                          self.numfila) < self.tamaAch:
        xvalue = 0
        # store x and y coordinates and timestamps
        for yvalue in self.data:
            writer.writerow([xvalue, yvalue, strftime("%Y-%m-%d %H:%M:%S")])
            xvalue = xvalue + 1
        # self.plotPoints()

    ofile.close()
    self.numfila += 1

def ReceptorDeEventos(self, event):
    id = event.GetId()

    if id == self.guardarGrafica.GetId():
        #Guarda la grafica como imagen
        file_choices = "PNG (*.png)|*.png"

        dlg = wx.FileDialog(
            self,
            message="Guardar grafica como...",
            defaultDir=os.getcwd(),
            defaultFile="plot.png",
            wildcard=file_choices)

        # confirmation message after the file is saved
        if dlg.ShowModal() == wx.ID_OK:
            path = dlg.GetPath()
            self.canvas.print_figure(path, dpi=self.dpi)

    if id == self.salir.GetId():
        self.timerD.Destroy()
        self.Close()

    if id == self.botonEncender.GetId():
        #Codigo para el encender precionado



        self.encender = not self.encender

        # Actualizar encender
        if self.encender:
            txt = "Encender"
        else:
            txt = "Apagar"
        self.botonEncender.SetLabel(txt)

    if id == self.botonPausa.GetId():
        self.pausa = not self.pausa

        # change the text in the pause button
        if self.pausa:
            txt = "Continuar"
        else:
            txt = "Pausa"
        self.botonPausa.SetLabel(txt)

    if id == self.botonEscribir.GetId():
        self.escritura = not self.escritura
        if self.escritura:
            txt = "Dejar de escribir"
        else:
            txt = "Escribir"
        self.botonEscribir.SetLabel(txt)

0 个答案:

没有答案