我正在尝试制作一个程序,以不断更新我使用的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)