2010/6/17 Arnau Sanchez <[email protected]>:
> On Thu, 17 Jun 2010 00:20:35 +0200 Jesús Genicio wrote:
>
>> Traceback (most recent call last):
>> File "termometro.py", line 81, in evento_leer_temperatura
>> Texto= self.label_Temperatura
>> AttributeError: App instance has no attribute 'label_Temperatura'
>
> Veamos, tienes:
>
> class App:
> def __init__(self):
> builder = gtk.Builder()
> builder.add_from_file("termometro.xml")
>
> self.window = builder.get_object("Principal")
> builder.connect_signals(self)
>
> def evento_leer_temperatura(self, widget):
> Texto= self.label_Temperatura
>
> ¿Pero en qué punto del programa has hecho que los widgets sean
> atributos de la instancia? builder.connect_signals() conecta callbacks
> (usando introspección), nada más. Los widgets los tienes disponibles a
> través de builder.get_object:
>
> label = builder.get_object("label_Temperatura")
Hago esto:
def evento_leer_temperatura(self, widget):
Texto= builder.get_object("label_Temperatura")
Texto.modify_font(pango.FontDescription("sans 48"))
Texto.set_text( conectar())
Y me da el error:
je...@servidor:~/Programacion/avr/proyectos/Comunicaciones_Serie$
python termometro.py
Traceback (most recent call last):
File "termometro.py", line 81, in evento_leer_temperatura
builder= self.Builder()
AttributeError: App instance has no attribute 'Builder'
He modificado el def __init__(self): añadiendo self.temp =
builder.get_object("label_Temperatura")
y en:
def evento_leer_temperatura(self, widget):
Texto= self.temp
Texto.modify_font(pango.FontDescription("sans 48"))
Texto.set_text( conectar())
Y me lo lee cada vez que hago click en el botón correspondiente. ¿Te
parece correcto así.?
>
> (Por cierto, ese nombre no parece muy estándar, la gente suele usar
> cosas como "label_temperatura", "labelTemperatura",
> "LabelTemperatura", ...)
>
> ----
> ¿Me permites algunos comentarios del código? Me tomo la libertad ;-)
Toda ayuda es bien recibida, muchas gracias. Yo suelo hacer todo en C,
y la verdad el python se me queda grande, al menos de momento. Ahora
bien, una vez veo tu código, está claro que python es "diferente" :))
>
>> def ftdi():
>> busses = usb.busses()
>> for bus in busses:
>> devices = bus.devices
>> for dev in devices:
>> if dev.idVendor== 1027 and dev.idProduct== 24577:
>> return 1
>> return 0
>
> Aquí (y en otros sitios) usas 0 como False y 1 como True. ¿Por qué no
> booleanos? Más: esa estructura de bucle + condición + return True huele
> a any():
>
> def ftdi():
> return any(dev.idVendor == 1027 and dev.idProduct == 24577
> for bus in usb.busses() for dev in bus.devices)
>
> Conceptualmente parecería más conveniente que la función devolviera el
> dispositivo, no un booleano. Para ello puedes preparar una función
> first() y usarla en vez del any():
>
> def first(it, default=False):
> return next(it, default)
>
> def ftdi():
> return first(dev for bus in usb.busses() for dev in bus.devices
> if dev.idVendor == 1027 and dev.idProduct == 24577)
>
>> def conectar():
>> if ftdi():
>> puerto= puertos()
>> if puerto != 0:
>> PuertoSerie= serial.Serial(puerto, 19200, timeout= 1)
>> while True:
>> PuertoSerie.write("T")
>
> Este patrón es bastante usual: condición ó salir, condicion ó
> salir, .... Si tuvieras N condiciones la tabulación no daría abasto.
>
> Quizá:
>
> if not ftdi():
> return
> puerto = puertos()
> if not puerto:
> return
>
> ...
>
>> if __name__ == "__main__":
>> try:
>> a = App()
>> # gobject.timeout_add( 1000, a.imprime( a))
>> gtk.main()
>> except KeyboardInterrupt:
>> pass
>
> ¿Alguna razón para capturar Control+C? En general es mejor dejarle esas
> cosas a Python, a no ser que tu programa tenga que hacer una limpieza
> específica.
Es debido a que en un futuro próximo, quiero enviarle una orden a la
tarjeta externa, indicándole que ya no es requerida y que lo ha sido
por una acción directa del usuario.
Gracias por la respuesta, y los comentarios.
S2.
> _______________________________________________
> Python-es mailing list
> [email protected]
> http://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
_______________________________________________
Python-es mailing list
[email protected]
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/