Supongo que esto es posible con un cuadro de texto de líneas múltiples, pero no estoy seguro de cómo hacerlo. Lo que estoy buscando hacer es crear un cuadro de registro en mi programa wxPython, donde puedo escribir mensajes cuando ocurren ciertas acciones. Además, necesito escribir los mensajes no solo cuando ocurre un evento, sino también ciertas veces en el código. ¿Cómo podría redibujar la ventana para que los mensajes aparezcan en ese instante?Cómo hacer algo como una caja de registro en wxPython
Respuesta
me escribió un artículo sobre este tipo de cosas hace un par de años:
http://www.blog.pythonlibrary.org/2009/01/01/wxpython-redirecting-stdout-stderr/
esto es EXACTAMENTE lo que estaba buscando, ¡muchas gracias! – ULcajun
Si desea sólo una diálogo de registro en wxpython, utilice wx.LogWindow:
import wx
class MainWindow(wx.Frame):
def __init__(self, parent=None):
wx.Frame.__init__(self, parent, wx.NewId(), 'Logging')
self.log_window = wx.LogWindow(self, 'Log Window', bShow=True)
box_sizer = wx.BoxSizer(orient=wx.VERTICAL)
show_log_button = wx.Button(self, wx.NewId(), 'Show Log')
show_log_button.Bind(wx.EVT_BUTTON, self._show_log)
log_message_button = wx.Button(self, wx.NewId(), 'Log Message')
log_message_button.Bind(wx.EVT_BUTTON, self._log_message)
box_sizer.AddMany((show_log_button, log_message_button))
self.SetSizer(box_sizer)
self.Fit()
self.Bind(wx.EVT_CLOSE, self._on_close)
def _show_log(self, event):
self.log_window.Show()
def _log_message(self, event):
wx.LogError('New error message')
def _on_close(self, event):
self.log_window.this.disown()
wx.Log.SetActiveTarget(None)
event.Skip()
if __name__ == '__main__':
app = wx.PySimpleApp()
dlg = MainWindow()
dlg.Show()
app.MainLoop()
Dónde bShow en wx.LogWindow es, si se muestra o no inicialmente. Esto registrará muy bien todos los mensajes wx.LogX que puede activar, y aún así los pasa a otros manejadores.
Otro método que podría utilizar sería que conectarse con un pitón y luego, al abrir un marco/ventana con un control de texto en él, utilizar LoadFile para abrir el archivo de registro:
import logging
LOG_FILENAME = 'example.log'
logging.basicConfig(filename=LOG_FILENAME,level=logging.DEBUG)
logging.debug('This message should go to the log file')
Entonces, cuando se crea un wx.TextCtrl alguna parte:
log_control = wx.TextCtrl(self, wx.NewId(), style=wx.TE_MULTILINE|wx.TE_READONLY)
log_control.LoadFile('example.log')
EDIT: Este ahora trabaja con el evento _on_close! Gracias Fenikso
En mi configuración (Windows-XP-SP3, Python 2.7.1, wxPython 2.8.11.0) falla con "python.exe ha encontrado un problema y debe cerrarse" " de cerca. No estoy seguro por qué. – Fenikso
¡Esto ya está arreglado! – Iacks
Hmmm. Este concepto de despropósito me parece extraño. Lo hice un poco más y de una manera más directa. Básicamente moví el log_window fuera de MainWindow, por lo que es independiente, y luego le di a MainWindow la referencia a log_window. – Fenikso
- 1. ¿Cómo puedo hacer algo como un FlowLayout en Android?
- 2. ¿Cómo registro algo en el meteoro?
- 3. ¿Cómo hacer algo como las carpetas de iPhone?
- 4. Django como una caja de selección múltiple
- 5. ¿Hay alguna manera de hacer algo como esto en C#?
- 6. ¿Puede Java hacer algo como categoría en Objective C? Considere
- 7. ¿Hay algo así como una altura de línea automática?
- 8. ¿Cómo hago algo así como una memcpy en D
- 9. ¿Cómo puedo hacer algo como gf, pero en una nueva división vertical?
- 10. ¿Hay algo como "+ =" en SASS?
- 11. ¿Cómo hacer algo antes en el envío?
- 12. ¿Cómo puedo capturar todas las excepciones de una aplicación wxPython?
- 13. Hacer ancho de columna ocupar espacio disponible en wxPython ListCtrl
- 14. ¿Cómo instalo wxPython en virtualenv
- 15. wxPython: cómo hacer que un TextCtrl complete un panel
- 16. ¿Hay algo así como el Visor de registro de ensamblaje en Windows Azure?
- 17. does minHeight ¿hacer algo?
- 18. Cómo hacer que la caja de color gris con tiks
- 19. ¿Puede hacer algo como "rspec --color --format doc"?
- 20. ¿Línea divisible redimensionable en wxpython?
- 21. Cómo instalar wxPython usando virtualenv
- 22. Mono.Cecil algo como Type.GetInterfaceMap?
- 23. ¿Algo como SciPy en Ruby?
- 24. Algo como Smarty en ASP.NET?
- 25. wxPython: ¿cómo crear una ventana de shell bash?
- 26. ¿Cómo hacer un efecto de agua en TImage o algo?
- 27. ¿Cómo hacer svn commit como usuario diferente?
- 28. ¿Cómo depurar las aplicaciones wxpython?
- 29. ¿Cómo diseñar una buena caja?
- 30. ¿Cómo usar una caja de conmutadores 'o' en PHP?
Específicamente, ¿qué estás teniendo problemas con? ¿Qué has intentado? – Philip
He hecho algo así en mi propia aplicación. aquí es básico: he usado GTK para mi aplicación, he creado gtkTextBuffer y lo he asignado a textArea. Agrego más texto al buffer, y GTK lo imprime en textArea. Creo que en WX debería haber algo así. O tal vez puedas crear un área de texto en tu aplicación y anexarle texto – Lixas