tkinter en python

Abel Aranda Abel.aranda en salud.madrid.org
Mie Mayo 18 21:16:44 CEST 2005


Buenas tardes, al final lo solucione utilizando un thread, pero sigo con
la varios problemas....

Tengo el siguiente código.
Esta parte me dibuja los checkbuttons

global Maquinas
   for i in Maquinas:      
      self.checkObjects.append(StringVar())
      self.oneObject =
Checkbutton(self.personalFrame,text=i.nombre,variable=self.checkObject
s[-1],anchor='e',onvalue=i.nombre, offvalue="",command =
self.pulsar,foreground = "#FF0000")
	self.listaobjetos.append(self.oneObject)
    for i,cb in enumerate(self.listaobjetos): 
    		cb.grid(column=i % 4, row=i / 4,sticky = W)
        	Maquinas[i].posx = i / 4 
		Maquinas[i].posy = i % 4

Y un tread lanzado

def threads(self):
    print "lanzando"
    global Maquinas
    self.threadping = threading.Thread(target=self.run)
    self.threadping.start()

ambos dentro del mismo objeto

la cuestion es que desde el trhead quiero modificar la aplicación
grafica, cambiar el color de un checkburron ( es una maquina ) cuando se
pierda conectividad con ella, y no se como hacerlo

cada vez que utilizo el metodo boton.grid me da un error desde el thread

mi idea seria hacer algo asi

def run(self)
	if maquina se cae:
		self.listaobjetos.eliminar_dicho_objeto
		self.listaobjetos.insertar_en_la_posicion_en la que
estaba el 
		objeto anterior el nuevo pero con un color diferente.
		Volver a pintarlo en la posición gris del anterior
		Hacer algo parecido a un root.update() para que coja los
cambios

A ver si hay suerte y alguien puede echarme una mano.

Lo del sondeo lo solucione con el trhead, es un bucle infinito que al
final tiene un sleep de 20 sg y después de eso sondeo una variable
global para ver si he de salir del thread y terminar su ejecución.


Un Saludo

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Abel Aranda Arriscado
   Administrador 
   CEDAS

 Centro de Datos, Administración y Soporte
   e-mail: abel.aranda en salud.madrid.org 
   tfno: 91 4265549,  móvil: 670726950
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
El contenido de esta comunicación debe considerarse privado y
confidencial. Si Vd. no es el destinatario y la hubiere recibido por
error, se le informa que cualquier divulgación, distribución o copia de
esta comunicación está estrictamente prohibida; por favor, notifíquelo
inmediatamente al  remitente y elimine este mensaje. 


This Email is intended for the exclusive use of the addressee only. If
you are not the intended recipient, you should not use the contents nor
disclose them to any other person and you should immediately notify the
sender and delete the Email.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 


-----Mensaje original-----
De: python-es-bounces en aditel.org [mailto:python-es-bounces en aditel.org]
En nombre de Ernesto Revilla
Enviado el: lunes, 16 de mayo de 2005 23:20
Para: La lista de python en castellano
Asunto: Re: [Python-es] tkinter en python

En tkinter:

class Application:
    pollInterval=100 # intervalo de poll en milisegundos
    def __init__(self):
       self.root=self.createMainWindow()
       # cualquier cosa aquí
       self.pollTaks()
    

    def createMainWindow(self):
       root=Tkinter.Tk()
       # cualquier cosa para construir interfaz
       ...
       return root

    def pollTask(self):
       # haz lo que quieras aquí
       ...
       # casda
        self.root.after(self.pollInterval,self.pollTask)


es decir, usas .after de Tkinter.Tk o cualquier otro widget que hayas 
creado. La sintaxis es:
widget.after(intervaloEnMilisegundos, metodo, argumento1, 
argumento2....). El propio procedimiento tiene que reregistrarse con 
after si se desea que sea periódico.

Tkinter sólo te va a asegurar que el método no se va a llamar antes. Si 
está ocupado no va a llamar a la función.

Sacado de:
http://www.pythonware.com/library/tkinter/introduction/
en concreto:
http://www.pythonware.com/library/tkinter/introduction/x9507-alarm-handl
ers-and-other.htm

Erny

Aranda Arriscado, Abel escribió:

>
>buenas sigo realizando una plicacion con python y me encuentro con el
siguiente problema,un treao d y la aplicación grafica, y lo que deseo es
que la aplicacion grafica sondee cada cierto tiempo una variable
global(siempre va a leer de ella nunca escribir).
>
>Alguno tiene idea de como se puede hacer esto de forma predeterminada,
algun metodo para que lo estee sondeando desde que arranco la aplicacion
pero que no me kite el control de esta, por ejemplo que lo sondee cada
20 segundos pero pueda seguir trabajando con la aplicacion grafica.
>
>
>A ver si alguien me puede ayudar
>  
>
>-----------------------------------------------------------------------
-
>
>_______________________________________________
>Python-es mailing list
>Python-es en aditel.org
>http://listas.aditel.org/listinfo/python-es
>  
>


-- 
=========================================
    NO A LAS PATENTES DE SOFTWARE
    http://proinnova.hispalinux.es
=========================================

Ernesto Revilla
sicem sl
Pol. Ind. Juncaril, c/ Loja Parc. 7 Local 13
18220 Albolote
http://www.sicem.biz
Tel: 637 716189
MSN: aerd en mx3.redestb.es
ICQ: 163888521




---
avast! Antivirus: Saliente mensaje limpio.
Base de datos de Virus (VPS): 0520-0, 16/05/2005
Comprobado en: 16/05/2005 23:20:08
avast! tiene los derechos reservados (c) 2000-2004 ALWIL Software.
http://www.avast.com




Más información sobre la lista de distribución Python-es