• Viernes 3 de Mayo de 2024, 06:45

Autor Tema:  Darle Un Valor A Un Textctrl Con Wxpython  (Leído 4317 veces)

RadicalEd

  • Moderador
  • ******
  • Mensajes: 2430
  • Nacionalidad: co
    • Ver Perfil
Darle Un Valor A Un Textctrl Con Wxpython
« en: Sábado 23 de Septiembre de 2006, 17:59 »
0
Hola chicos de SoloCodigo, pos miren que estoy tratando de agregar texto a un TextCtrl por medio de una función que abre un archivo, y me muestra un error, yo lo puse de esta forma:
Código: Text
  1. #Control que carga el archivo
  2. self.txtSaludo = wx.TextCtrl(self,-1,'',style = wx.TE_MULTILINE)
  3.  
  4. #Función que abre un archivo
  5. def fichero(filename):
  6.   file = open(filename, 'r')
  7.         allLines = file.readlines()
  8.   file.close()
  9.   for eachLine in allLines:
  10.      self.txtSaludo.SetValue(self, eachLine)
  11.  
  12. fichero('/media/usbdisk/ficheros.py')
  13.  
Este es el error:
Traceback (most recent call last):
  File "ventanaporpasos.py", line 59, in ?
    fichero('/media/usbdisk/ficheros.py')
NameError: name 'fichero' is not defined
El pasado son solo recuerdos, el futuro son solo sueños

NRM

  • Miembro MUY activo
  • ***
  • Mensajes: 279
  • Nacionalidad: ar
    • Ver Perfil
    • http://www.narrowmind.com.ar
Re: Darle Un Valor A Un Textctrl Con Wxpython
« Respuesta #1 en: Lunes 25 de Septiembre de 2006, 00:00 »
0
seria de mucha ayuda que pongas todo el src, asi vemos la linea 59.

saludos

nrm

RadicalEd

  • Moderador
  • ******
  • Mensajes: 2430
  • Nacionalidad: co
    • Ver Perfil
Re: Darle Un Valor A Un Textctrl Con Wxpython
« Respuesta #2 en: Lunes 25 de Septiembre de 2006, 15:17 »
0
Hola NRM gracias por responder, ya pude hacer lo de abrir un archivo y cargarlo en el TextCtrl, lo hice utilizando la clase FileDialog, ahora el problema es que no me abre archivos UTF8, y me saca un error, este es el código:
Código: Text
  1. #! -*- coding: iso8859-1 -*-
  2. #! /usr/bin/env python
  3. #Creado por radicaled.
  4.  
  5. import wx
  6. import os
  7. import sys
  8.  
  9. class MiVentana (wx.Frame):
  10.     def __init__ ( self ):
  11.         #Se hace la construccion del metodo __init__ para inicializar los valores del frame
  12.         wx.Frame.__init__( self, None, -1, u'Open Files')
  13.         self.SetBackgroundColour(wx.BLACK)
  14.         self.txtSaludo = wx.TextCtrl(self,-1,'',style = wx.TE_MULTILINE)
  15.         self.btnSaludo = wx.Button(self,-1,'Texto Boton')
  16.         self.btnSalir = wx.Button(self,-1,'Salir')
  17.         #El BoxSizer es el que contendra los controles creados (en Python 'widgets')
  18.         sPal = wx.BoxSizer(wx.VERTICAL)
  19.         #Se agrega el TextBox, se hace que se expanda si el frame cambia el tamaño y si se minimiza tambien se acomode
  20.         sPal.Add(self.txtSaludo,1,wx.EXPAND | wx.ADJUST_MINSIZE,0)
  21.         #Se agrega el Boton, se alinea al centro y si se minimiza se debe acomodar
  22.         sPal.Add(self.btnSaludo,0,wx.ALL | wx.ALIGN_CENTER_VERTICAL | wx.ADJUST_MINSIZE,5)
  23.         sPal.Add(self.btnSalir,0,wx.ALL | wx.ALIGN_CENTER_VERTICAL | wx.ADJUST_MINSIZE,5)
  24.         self.SetAutoLayout(True)
  25.         self.SetSizer(sPal)
  26.         self.Layout()
  27.         self.Show(True)
  28.  
  29.         #self.btnSaludo.Bind(wx.EVT_BUTTON, self.Saludar)
  30.         self.btnSaludo.Bind(wx.EVT_BUTTON, self.OnAbrir)
  31.         self.btnSalir.Bind(wx.EVT_BUTTON, self.OnCloseWindow)
  32.  
  33.     def OnAbrir ( self, e ):
  34.         """ Open a file"""
  35.         dir_ventana=os.path.dirname(sys.argv[0])
  36.         if dir_ventana :
  37.             os.chdir(dir_ventana)
  38.         dlg = wx.FileDialog(self, u'Escoja un archivo', dir_ventana, '', '*.*', wx.OPEN)
  39.         print os.getcwd()
  40.         if dlg.ShowModal() == wx.ID_OK:
  41.             self.filename = dlg.GetFilename()
  42.             self.dirname = dlg.GetDirectory()
  43.             f = open(self.dirname+'/'+self.filename,'r')
  44.             self.txtSaludo.SetValue(f.read())
  45.             #wx.Frame.__init__( self, None, -1, dlg.GetFilename())
  46.             f.close()
  47.             dlg.Destroy()
  48.  
  49.     def fichero(filename):
  50.         file = open(filename, 'r')
  51.        allLines = file.readlines()
  52.         file.close()
  53.         for eachLine in allLines:
  54.             self.txtSaludo.SetValue(self, eachLine)
  55.  
  56.     def Saludar ( self, evento = None ):
  57.         '''Manejador evento click del botón btnSaludo'''
  58.         saludo = self.txtSaludo.GetValue()
  59.         print saludo
  60.         dlg = wx.MessageDialog(self, saludo, u'Ejemplo', wx.OK | wx.ICON_INFORMATION)
  61.         #Con esto se muestra el MessageBox
  62.         salida = dlg.ShowModal()
  63.  
  64.     def Salir ( self ):
  65.         dlg = wx.MessageDialog(self, u'Realmente desea salir?', u'Advertencia', wx.OK + wx.CANCEL | wx.ICON_EXCLAMATION)#wx.ICON_INFORMATION)
  66.         #Con esto se muestra el MessageBox
  67.         salida = dlg.ShowModal()
  68.         if salida == wx.ID_OK:
  69.             self.Destroy()
  70.            
  71.     def OnCloseWindow(self, event):
  72.         """Este evento captura cuando se quiere cerrar el editor"""
  73.         #Seguro que desea salir?
  74.         if not self.Salir():
  75.             return
  76.  
  77. class Aplicacion(wx.App) :
  78.     #Este es el método que inicializa la aplicación
  79.     def OnInit ( self ):
  80.         #Se crea una instancia de la ventana
  81.         self.ventana = MiVentana()
  82.         #Se le dice a miApp quien es la Ventana Principal
  83.         self.SetTopWindow(self.ventana)
  84.         return True
  85.  
  86. def main():
  87.     dir_ventana=os.path.dirname(sys.argv[0])
  88.     if dir_ventana :
  89.         os.chdir(dir_ventana)
  90.     app = Aplicacion(0)
  91.     app.MainLoop()
  92.  
  93. if __name__ == "__main__":
  94.   main()
  95.  
  96.  
Este es el error:

Traceback (most recent call last):
  File "ventanaporpasos.py", line 44, in OnAbrir
    self.txtSaludo.SetValue(f.read())
  File "/usr/lib/python2.3/site-packages/wx-2.6-gtk2-unicode/wx/_controls.py", line 1761, in SetValue
    return _controls_.TextCtrl_SetValue(*args, **kwargs)
UnicodeDecodeError: 'utf8' codec can't decode bytes in position 763-766: invalid data
El pasado son solo recuerdos, el futuro son solo sueños

NRM

  • Miembro MUY activo
  • ***
  • Mensajes: 279
  • Nacionalidad: ar
    • Ver Perfil
    • http://www.narrowmind.com.ar
Re: Darle Un Valor A Un Textctrl Con Wxpython
« Respuesta #3 en: Martes 26 de Septiembre de 2006, 07:05 »
0
tal vez estos links[1][2] te sirvan, aunque para que mi ayuda fuera mas precisa ahora necesitaria ver el archivo que no puedes abrir  :P.
espero te sea util.

saludos

nrm

[1] - http://evanjones.ca/python-utf8.html
[2] - http://www.amk.ca/python/howto/unicode

RadicalEd

  • Moderador
  • ******
  • Mensajes: 2430
  • Nacionalidad: co
    • Ver Perfil
Re: Darle Un Valor A Un Textctrl Con Wxpython
« Respuesta #4 en: Martes 26 de Septiembre de 2006, 14:58 »
0
Cita de: "NRM"
tal vez estos links[1][2] te sirvan, aunque para que mi ayuda fuera mas precisa ahora necesitaria ver el archivo que no puedes abrir  :P.
espero te sea util.

saludos

nrm

[1] - http://evanjones.ca/python-utf8.html
[2] - http://www.amk.ca/python/howto/unicode
El mismo script que ves arriba no lo puedo abrir.
El pasado son solo recuerdos, el futuro son solo sueños

NRM

  • Miembro MUY activo
  • ***
  • Mensajes: 279
  • Nacionalidad: ar
    • Ver Perfil
    • http://www.narrowmind.com.ar
Re: Darle Un Valor A Un Textctrl Con Wxpython
« Respuesta #5 en: Miércoles 27 de Septiembre de 2006, 04:33 »
0
ese mismo codigo a mi me funciona perfectamente.
si mal no recuerdo wxPython + wxwidgets deben ser compilados con soporte para unicode, tal vez tu no lo tengas con el mismo.

saludos

nrm

RadicalEd

  • Moderador
  • ******
  • Mensajes: 2430
  • Nacionalidad: co
    • Ver Perfil
Re: Darle Un Valor A Un Textctrl Con Wxpython
« Respuesta #6 en: Miércoles 27 de Septiembre de 2006, 21:18 »
0
Como hago eso?
El pasado son solo recuerdos, el futuro son solo sueños

NRM

  • Miembro MUY activo
  • ***
  • Mensajes: 279
  • Nacionalidad: ar
    • Ver Perfil
    • http://www.narrowmind.com.ar
Re: Darle Un Valor A Un Textctrl Con Wxpython
« Respuesta #7 en: Jueves 28 de Septiembre de 2006, 00:25 »
0
sobre que sistema operativo estas trabajando?

nrm

RadicalEd

  • Moderador
  • ******
  • Mensajes: 2430
  • Nacionalidad: co
    • Ver Perfil
Re: Darle Un Valor A Un Textctrl Con Wxpython
« Respuesta #8 en: Jueves 28 de Septiembre de 2006, 00:41 »
0
Linux Debian (LinEx)
El pasado son solo recuerdos, el futuro son solo sueños