amaury74
Messages postés24Date d'inscriptionvendredi 10 août 2007StatutMembreDernière intervention10 mai 2009
-
12 juin 2008 à 20:44
amaury74
Messages postés24Date d'inscriptionvendredi 10 août 2007StatutMembreDernière intervention10 mai 2009
-
18 juin 2008 à 19:46
Bonjours à tous,
J'ai écrit plusieurs petit codes destinés à dessiner des afficheurs sur Tkinter.
J'ai définie une fonction pour chaque code avec la commande def à l'intérieur d'un code plus important.
Le problème est que lorsque j'appelle l'une des fonction précédement crées, rien ne se passe.
Les fonctions onSelect marchent, mais pas onGalva, OnAff et OnLed...
Voici l'intégralité de mon code (un peu long):
# -*- coding: cp1252 -*-
from Tkinter import *
from math import *
import time
import random
select1=0
select2=0
select3=0
select4=0
select11=0
select12=0
select13=0
select14=0
consigne1=0
consigne2=0
consigne3=0
consigne4=0
m,j,k,l=25,65,125,175
consigne4=random.randint(0,100)
while m<70:
can4.create_line(70,m,130,m,width=5,fill="pink")
m=m+10
while m<120:
can4.create_line(70,m,130,m,width=5,fill="yellow")
m=m+10
while m<180:
can4.create_line(70,m,130,m,width=5,fill="aquamarine")
m=m+10
valeur4=int(consigne4*0.16)
while valeur4>=12:
can4.create_line(70,j,130,j,width=5,fill="red")
valeur4=valeur4-1
j=j-10
while valeur4>=6:
can4.create_line(70,k,130,k,width=5,fill="orange")
valeur4=valeur4-1
k=k-10
while valeur4>=0:
can4.create_line(70,l,130,l,width=5,fill="green")
valeur4=valeur4-1
l=l-10
aera group
Messages postés382Date d'inscriptionmercredi 23 août 2006StatutMembreDernière intervention 8 novembre 201018 13 juin 2008 à 10:11
aie aie aie .... Essayerais tu de remplacer Windows ? Tu as créé une boucle infini (while 1) pour "surveiller" les choix de l'utilisateur ; Résultat, mon UC est monter à 65% d'utilisation et rien ne se passe. Tout ton programme est absorbé par ta boucle, et Python aussi si bien qu'il n'arrive pas à te signaller les erreurs dans tes fonction (fonction onLed, dernière ligne, ne serraisse pas can4 par hazar parce que la variable can n'existe pas dans cette fonction). Inutile de vérifier l'état des variables continuallement, elles ne peuvent changer que lorsqu'un événement sur les listes de sélection est détecté (heureusement Windows le fait pour nous !). Au passage, j'ai viens de vérifié dans toutes tes sources, mais il manque toujours quelque chose à la fin de tes codes, l'instruction pour que Tk détecte et gère les événements : mainloop() !
Deuxième point important : les variables globales et locales ! Tel que tu l'as écrit ton programme créé deux fois les variables select1, select2, ... une fois globalement (dans les premières lignes du programme !) et une fois localement (dans les fonctions onSelect13, onSelect13, ... Utilise global pour ne plus avoir ce genre de problèmes !
Je t'ai corrigé ton code, tu véras qu'il reste des erreurs, mais j'ai répondu à ta question, et je te laisse un peu de travail ! Bon courrage
<hr />
# -*- coding: cp1252 -*-
from Tkinter import *
from math import *
import time
import random
m,j,k,l=25,65,125,175
consigne4=random.randint(0,100)
while m<70:
can4.create_line(70,m,130,m,width=5,fill="pink")
m=m+10
while m<120:
can4.create_line(70,m,130,m,width=5,fill="yellow")
m=m+10
while m<180:
can4.create_line(70,m,130,m,width=5,fill="aquamarine")
m=m+10
valeur4=int(consigne4*0.16)
while valeur4>=12:
can4.create_line(70,j,130,j,width=5,fill="red")
valeur4=valeur4-1
j=j-10
while valeur4>=6:
can4.create_line(70,k,130,k,width=5,fill="orange")
valeur4=valeur4-1
k=k-10
while valeur4>=0:
can4.create_line(70,l,130,l,width=5,fill="green")
valeur4=valeur4-1
l=l-10
m,j,k,l=25,65,125,175
consigne4=random.randint(0,100)
while m<70:
can4.create_line(70,m,130,m,width=5,fill="pink")
m=m+10
while m<120:
can4.create_line(70,m,130,m,width=5,fill="yellow")
m=m+10
while m<180:
can4.create_line(70,m,130,m,width=5,fill="aquamarine")
m=m+10
valeur4=int(consigne4*0.16)
while valeur4>=12:
can4.create_line(70,j,130,j,width=5,fill="red")
valeur4=valeur4-1
j=j-10
while valeur4>=6:
can4.create_line(70,k,130,k,width=5,fill="orange")
valeur4=valeur4-1
k=k-10
while valeur4>=0:
can4.create_line(70,l,130,l,width=5,fill="green")
valeur4=valeur4-1
l=l-10
amaury74
Messages postés24Date d'inscriptionvendredi 10 août 2007StatutMembreDernière intervention10 mai 2009 18 juin 2008 à 19:46
Mon code à un peu changé, mais j'ai toujours un problème de définition.
Cette fois-ci, c'est lorsque je clique sur le bouton "Tester".
J'obtient ce message:
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python25\lib\lib-tk\Tkinter.py", line 1403, in __call__
return self.func(*args)
File "F:\prog monitoring\GUI.py", line 203, in onTester
module1=onGalva(can1,consigne1,old1)
File "F:\prog monitoring\GUI.py", line 59, in onGalva
while (int(valeur*100+.5)!=int(consigne*100+.5)):
TypeError: unsupported operand type(s) for *: 'instance' and 'int'
Voici mon code:
# -*- coding: cp1252 -*-
from Tkinter import *
from math import *
import time
import random
m,j,k,l=25,65,125,175
consigne4=random.randint(0,100)
while m<70:
can4.create_line(70,m,130,m,width=5,fill="pink")
m=m+10
while m<120:
can4.create_line(70,m,130,m,width=5,fill="yellow")
m=m+10
while m<180:
can4.create_line(70,m,130,m,width=5,fill="aquamarine")
m=m+10
valeur4=int(consigne4*0.16)
while valeur4>=12:
can4.create_line(70,j,130,j,width=5,fill="red")
valeur4=valeur4-1
j=j-10
while valeur4>=6:
can4.create_line(70,k,130,k,width=5,fill="orange")
valeur4=valeur4-1
k=k-10
while valeur4>=0:
can4.create_line(70,l,130,l,width=5,fill="green")
valeur4=valeur4-1
l=l-10