IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Timer qui ne bloque pas l'interface


Sujet :

Python

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2006
    Messages : 35
    Points : 21
    Points
    21
    Par défaut Timer qui ne bloque pas l'interface
    Bonjour,
    Je cherche à réaliser un programme qui lance automatiquement une fonction au bout d'un petit délais.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
     
    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
     
    import os
    import pygtk
    pygtk.require('2.0')
    import gtk
     
    import time
     
    class CountDownTimer:
    	def run(self,output,t,step=1.0):
    		counter=float(t)
    		steps=range(int(t/step))
    		for sec in steps:
    			print counter
    			output.set_label(str(int(counter)))
    			while gtk.events_pending():
    				gtk.main_iteration()
    			time.sleep(step)
    			counter-=step
    		print 'done'
     
    class myprog:
    	def evnmt_delete(self, widget, evenement, data=None):
    		gtk.main_quit()
    		return False
    	def go(self,data):
    		c = CountDownTimer()
    		c.run(self.go_osd,10.0,0.5)
    		print 'GO'
    		gtk.main_quit()
    	def __init__(self):
    		self.fenetre = gtk.Window(gtk.WINDOW_TOPLEVEL)
    		self.fenetre.set_title("Download Manager")
    		self.fenetre.connect("delete_event", self.evnmt_delete)
    		self.fenetre.set_border_width(4)
    		#
    		self.box1 = gtk.VBox(False, 0)
    		self.fenetre.add(self.box1)
    		# go
    		self.box2= gtk.HBox(False,0)
    		self.go_osd = gtk.Button("Go")
    		self.go_osd.connect("clicked", self.go)
    		self.box2.pack_start(self.go_osd, True, True, 0)
    		self.box1.pack_start(self.box2, False, False, 0)
    		self.go_osd.show()
    		self.box2.show()
    		# quit
    		self.quitbox = gtk.HBox(False, 0)
    		self.quit_osd = gtk.Button("Quit/Stop")
    		self.quit_osd.connect("clicked", lambda w: gtk.main_quit())
    		self.quitbox.pack_start(self.quit_osd, True, False, 0)
    		self.box1.pack_start(self.quitbox, False, False, 0)
    		self.quit_osd.show()
    		self.quitbox.show()
    		#
    		self.box1.show()
    		self.fenetre.show()
     
    def waitForEvents():
    	gtk.main()
     
    if __name__ == "__main__":
    	myProg = myprog()
    	waitForEvents()
    J'ai écrit ce programme et quand on appuie sur 'GO' il commence à décompter quelques secondes et puis il affiche GO (dans le terminal) et ferme le programme.
    L'ennuie c'est qu'il m'est impossible d'arreter ce compte à rebour prématurément en appuyant sur Stop dans l'interface...

    L'idée à la base c'est que j'ai un compte à rebour et que je puisse l'annuler en appuyant sur Quit/Stop.

    Comment faut-il procéder selon vous ?
    (C'est d'autant plus ennuyeux que je compte relier cette fonction à mon siège éjectable)

  2. #2
    Membre éprouvé
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Points : 1 066
    Points
    1 066
    Par défaut
    Salut

    Je viens de donner un exemple, dans un autre post, d'usage de threads avec gtk.
    http://www.developpez.net/forums/d72...e/#post4202653

    Ca devrait résoudre ton souci (cela dit je pense que ce post aurait mieux trouvé sa place dans la partie gtk)

    Bonne chance pour ton siège éjectable :p

Discussions similaires

  1. Message attente qui ne bloque pas l'affichage en background
    Par gentyjp dans le forum Windows Forms
    Réponses: 1
    Dernier message: 17/05/2008, 00h25
  2. Temporisation qui ne bloque pas l'application
    Par Zorgloub dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 14/02/2008, 16h55
  3. alert() qui ne bloque pas le chargement de la page ?
    Par Cofondinde dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 16/08/2007, 10h31
  4. recvfrom qui ne bloque pas ?
    Par innosang dans le forum Réseau
    Réponses: 1
    Dernier message: 21/06/2007, 11h11
  5. Réponses: 8
    Dernier message: 25/11/2005, 18h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo