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 :

bug sous win 7 / ok sous linux


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 14
    Par défaut bug sous win 7 / ok sous linux
    bonjour a tous
    je développe actuellement un programme qui m'affiche un popup si certaines conditions sont remplies
    le programme principal tourne en arrière plan
    on ferme le popup,, un nouveau popup apparait si la condition est remplie...

    sous linux, pas de souci, cela fonctionne comme prévu..

    le meme code sous win7 bugue :

    apres le lancement du programme, des que la condition est remplie, le popup apparait... normal !

    fermeture du popup = ok

    si la condition est de nouveau remplie, pas de popup et utilisation PCU à 100% par python

    arret brutal (en tuant le process)

    voila les faits...

    j'utilise un thread pour gérer le popup de manière a laisser le programme principal faire ses tests ...


    si quelqu'un a une idée..

    merci de votre attention

    Quatre

  2. #2
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Bonjour,

    Citation Envoyé par Quatre Voir le message
    j'utilise un thread pour gérer le popup de manière a laisser le programme principal faire ses tests ...


    si quelqu'un a une idée..
    Une idée ? Oui.
    Avec du code vous aurez une réponse.

    @+

  3. #3
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    +1 pour PauseKawa.

    En particulier, il est fortement déconseillé de toucher au graphique avec les threads, et ceci dans toutes les bibliothèques graphiques. Ce seul point peut expliquer les plantages.

    Tyrtamos

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 14
    Par défaut
    bonjour
    pas de probleme, voici le code :

    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
     
    #!/usr/bin/env python
    import os
    import threading
    from Tkinter import *
     
    Repertoire = os.getcwd()
     
     
    def popup():
    	fenetre1 = Tk()
    	texte1 = Label(fenetre1, text='Nouveau fichier', fg='red')
    	texte1.pack()
    	bouton1 = Button(fenetre1, text='Fermer', command = fenetre1.quit)
    	bouton1.pack()
    	fenetre1.mainloop()
    	a.exit()
    	fenetre1.destroy()
     
    def MyTimer(tempo):
        threading.Timer(tempo, MyTimer, [tempo]).start()
        controler()
     
     
     
    def initialisation():
    	ListeInitiale = os.listdir(Repertoire)
    	global NbreFichier 
    	NbreFichier = len(ListeInitiale)
     
    def controler():
    	ListeTestee = os.listdir(Repertoire)
    	NbreFichierTeste = len(ListeTestee)
    	global NbreFichier
    	#print "Nbre de fichier de base = " + str(NbreFichier)
    	#print "Nbre de fichier teste = " + str(NbreFichierTeste)
     
    	if NbreFichierTeste < NbreFichier:
    		NbreFichier -= 1
     
    	if NbreFichierTeste > NbreFichier:
    		NbreFichier += 1
    		global a
    		a = threading.Thread(None, popup, None,())	
    		a.start()
     
    def main():
    		initialisation()
    		#print "nbre de base = " + str(NbreFichier)
    		MyTimer(2.0)
     
     
    if __name__ == "__main__":
    	main()
    merci de votre attention

    Quatre

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 738
    Par défaut
    Salut,

    Comme l'on dit PauseKawa et tyrtamos, c'est le design qui va pas: l'IHM est "globale", "singleton", non ré-entrante,...
    L'ignorez c'est accepter d'avoir des plantages aléatoires dans des conditions pas très claires: ca marche sous Linux, çà plante sous Windows,...

    Si vous êtes pressé, que vous n'avez pas le temps de ré-écrire votre code après avoir compris les implications de "singleton", une rustine pourrait être d'ajouter a.join() après a.start() dans controler.
    Note: L'intention est qu'à l'instant t, vous n'aurez qu'une seule thread 'active' ce qui peut être suffisant pour garantir "une seule instance d'IHM".
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Bonjour,

    Pour traduire (il est taquin notre wiztricks) c'est la structure du code qui est a revoir.
    Puisque tu souhaite utiliser un timer je te recommande de partir de l'exemple de la FAQ et de rajouter la couche graphique.

    Pour ce qui est de la partie tkinter il est recommandé de n'avoir qu'une instance Tk(). Dans ce sens il serait bien de l'avoir dans le main et d'utiliser un toplevel pour afficher ton message.

    Pour ne pas afficher la fenêtre principale utilise l'overrideredirect() et withdraw().

    Pour le main tu dois le structurer comme ceci:
    instance Tk()
    Instruction pour fermer le thread si on quitte l'instance Tk
    Lancement du thread
    Le mainloop Tk()

    Avec ceci tu auras déjà quelque chose de plus stable.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 14
    Par défaut
    bonsoir
    merci pour vos réponse

    pour info, mon timer est fait a partir de l'exemple de la FAQ -> pas de souci avec lui

    suite à vos conseils, j'ai essayer différentes versions avec une seule instance de Tk (invisible grâce a withdraw et a PauseKawa) associé à toplevel ou tkMessageBox avec ou sans thread d'appel

    sous linux , ça marche a tout les coups
    sous windows, je n'ai jamais l'affichage du popup

    je continue mes recherches....

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 16/06/2015, 07h37
  2. Pb jsp sous unix et pas sous win - OU - Pb tomcat
    Par estelle31 dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 03/11/2008, 10h28
  3. programme qui tourne sous win98 et plante sous win xp
    Par serrepate dans le forum Windows
    Réponses: 7
    Dernier message: 24/06/2007, 13h13
  4. GTK+ sous Code::Blocks et sous Win
    Par Shugo78 dans le forum GTK+ avec C & C++
    Réponses: 8
    Dernier message: 30/04/2007, 23h54
  5. NoClassDefFoundError sous win, mais ok sous linux
    Par robert_trudel dans le forum Général Java
    Réponses: 1
    Dernier message: 15/02/2007, 09h07

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