Foros del Web » Programando para Internet » Python »

Pausar mi programa

Estas en el tema de Pausar mi programa en el foro de Python en Foros del Web. Hola; Tengo una duda que es como pausar un programar que este trabajando con Tkinter al pulsar un tecla, es decir, que se paren todas ...
  #1 (permalink)  
Antiguo 24/11/2009, 11:11
 
Fecha de Ingreso: noviembre-2009
Mensajes: 8
Antigüedad: 15 años, 1 mes
Puntos: 0
Pausar mi programa

Hola;

Tengo una duda que es como pausar un programar que este trabajando con Tkinter al pulsar un tecla, es decir, que se paren todas las animaciones.
  #2 (permalink)  
Antiguo 25/11/2009, 09:06
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Pausar mi programa

¿Y cómo se generan esas animaciones? ¿algo de código que podamos ver?

Sin ver más detalles, la única respuesta posible es: "un hechicero lo hizo"
  #3 (permalink)  
Antiguo 26/11/2009, 03:36
 
Fecha de Ingreso: noviembre-2009
Mensajes: 8
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Pausar mi programa

Código python:
Ver original
  1. def request_ms(self, color, sentido):#El metodo request_ms se encarga de realizar la animacion del envio de un paquete de peticion de arbol.
  2.        
  3.        
  4.             x = 0
  5.             if self == link1_3  and sentido == 'a' :
  6.                     sentido = 'd'
  7.                
  8.             elif self == link1_3  and sentido == 'd' :
  9.                     sentido = 'a'
  10.             if self == link2_4  and sentido == 'a' :
  11.                     sentido = 'd'
  12.                
  13.             elif self == link2_4  and sentido == 'd' :
  14.                     sentido = 'a'
  15.             while x < 11 :
  16.                 root.update_idletasks()
  17.                 time.sleep(self.peso/50.99)
  18.                 if sentido == 'd' :
  19.                     canvas.itemconfigure(self.datalink[10 - x], width = 3, fill= color, stipple = "gray50")
  20.                 elif sentido == 'a' :
  21.                     canvas.itemconfigure(self.datalink[x], width = 3, fill= color, stipple = "gray50")
  22.                 x = x+1
  23.                 root.update_idletasks()
  24.             self.reinicio()
Por ejemplo me gustaria para esta animacion simple pero por lo que e visto al hacer un evento de teclado este no se realiza hasta que acaba toda la animacion no cuando pulso la tecla.

Un saludo y gracias por tu ayuda

Última edición por AlvaroG; 26/11/2009 a las 08:18 Razón: resaltado de sintaxis
  #4 (permalink)  
Antiguo 26/11/2009, 08:22
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Pausar mi programa

Si no se realiza hasta que acaba la animación, debe ser porque el hilo que recibe la entrada del teclado está ocupado generando la animación.

Quizás puedas lograr lo que buscas haciendo que la animación sea realizada por un hilo diferente al que se encarga de generar la interfaz de usuario. De esta forma, en el hilo animador puedes en cada paso comprobar si cierta variable está definida o tiene un valor determinado. A la vez, el valor de esa variable puede ser actualizado por el hilo que queda listo para recibir la entrada del teclado (o de algún botón de la ventana)

Puede que sea una solución poco elegante, pero es la que se me ocurre ahora mismo.


Saludos.
  #5 (permalink)  
Antiguo 28/11/2009, 06:01
 
Fecha de Ingreso: noviembre-2009
Mensajes: 8
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Pausar mi programa

Probare a ver, muchas gracias
  #6 (permalink)  
Antiguo 30/11/2009, 04:57
 
Fecha de Ingreso: noviembre-2009
Mensajes: 8
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Pausar mi programa

Hola,

Ahora tengo otro prblema y es que cuando creo mi clase hilo y ejecuto:

Código:
import threading 


 
    
class MiThread(threading.Thread, nodo, link):  
	def __init__(self):  
        	threading.Thread.__init__(self)  
        	#self.num = num  
      
        def run(self):  
		print "Soy el hilo"

		 
		#Creamos todos los nodos
		nodoz = nodo(600, 600, 'grey', 8, 0, 0)
		nodoz.create_node()
		nodo1 = nodo(125, 175, '#FF0000', 1, 0, 0)
		nodo1.create_node()
		nodo2 = nodo(475,175, '#FFFF00', 2, 0, 0)
		nodo2.create_node()
		nodo3 = nodo(125,475, '#0000FF', 3, 0, 0)
		nodo3.create_node()
		nodo4 = nodo(475, 475, '#00FF00', 4, 0, 0)
		nodo4.create_node()
		
		#Creamos todos los links
		link1_2 = link('n1','n2', 'enlace1_2', 0, 0, 2)
		link1_2.make_link()
		link3_4 = link('n3', 'n4', 'enlace3_4', 0, 0, 2)
		link3_4.make_link()
		link1_3 = link('n1', 'n3', 'enlace1_3', 0, 0, 2)
		link1_3.make_link()
		link2_4 = link('n2', 'n4', 'enlace2_4', 0, 0, 2)
		link2_4.make_link()
	...

t = MiThread()  
t.start()
Al hacer el t.start me hace bien las llamadas a los metodos de nodo pero cuando llega a link1_2 me dice que "global name link1_2 is not defined", no comprendo porque si funciona con nodo y no con link que son las dos clases muy similares.
  #7 (permalink)  
Antiguo 02/12/2009, 06:58
 
Fecha de Ingreso: noviembre-2009
Mensajes: 8
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Pausar mi programa

Bueno, ya e solucinado el problema simplemente habia que declarar los objetos que creo de las clases link y nodo como variables globales.

Ya va perfecto
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:24.