Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

GALVANOMÈTRE


Information sur la source

Catégorie :Graphique Classé sous : Galvanomètre, Tkinter, Afficheur, Widget Niveau : Initié Date de création : 07/06/2008 Date de mise à jour : 04/02/2009 17:34:20 Vu / téléchargé: 2 383 / 88

Note :
10 / 10 - par 1 personne
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (3)
Ajouter un commentaire et/ou une note

Description

Cliquez pour voir la capture en taille normale
Widget Tkinter qui génère un galvanomètre dont la valeur affichée est modifiable par la commande SetValue()
 

Source

  • # -*- coding: cp1252 -*-
  • # Galvanomètre développé pour la librairie Tkinter
  • # Ecrit et immaginé par Amaury
  • # Yvan : ajouté la version non linéaire
  • from Tkinter import *
  • from math import *
  • import time
  • import random
  • class Galva(Canvas):
  • def __init__(self,parent):
  • global valeur,root,aiguille,txt
  • root=parent
  • valeur=0.
  • b=0
  • a=0
  • Canvas.__init__(self)
  • #Dessin du Galva
  • self.create_rectangle(0,0,200,200,fill="white",outline="white")
  • self.create_rectangle(10,10,190,150,width=2,fill="white")
  • self.create_rectangle(10,120,190,150,width=2,fill="grey")
  • self.create_oval(25,25,175,175,width=2)
  • self.create_rectangle(12,60,188,118,fill="white",outline="white")
  • self.create_rectangle(12,121,188,148,fill="grey",outline="grey")
  • self.create_rectangle(10,151,190,200,fill="white",outline="white")
  • self.create_oval(90,125,110,145, width=2,fill="white")
  • self.create_line(108,127,92,143,width=5)
  • self.create_oval(95,100,105,110,fill="red",outline="red")
  • a=(3-(0/50.))*(pi/4)
  • x=100+90*cos(a)
  • y=105-90*sin(a)
  • aiguille=self.create_line(100,105,x,y,width=1,fill="red")
  • txt=self.create_text(12,160, text="0")
  • parent.update()
  • def SetValue(self,consigne):
  • global valeur,root,aiguille,txt
  • parent=root
  • while (int(valeur*100+.5)!=int(consigne*100+.5)):
  • if (valeur<consigne):
  • valeur=valeur+(float(consigne-valeur)/50)
  • float (valeur)
  • a=(3-(valeur/50.))*(pi/4)
  • x=100+90*cos(a)
  • y=105-90*sin(a)
  • self.delete(aiguille)
  • self.delete(txt)
  • aiguille=self.create_line(100,105,x,y,width=1,fill="red")
  • txt=self.create_text(12,160, text=int(valeur) )
  • parent.update()
  • time.sleep(0.002) #Définie l'inertie de l'aiguille (Timer)
  • elif(valeur>consigne):
  • valeur=valeur+(float(consigne-valeur)/50)
  • float (valeur)
  • a=(3-(valeur/50.))*(pi/4)
  • x=100+90*cos(a)
  • y=105-90*sin(a)
  • self.delete(aiguille)
  • self.delete(txt)
  • aiguille=self.create_line(100,105,x,y,width=1,fill="red")
  • txt=self.create_text(12,160, text=int(valeur) )
  • parent.update()
  • time.sleep(0.002) #Définie l'inertie de l'aiguille (Timer)
  • else:
  • float (valeur)
  • a=(3-(valeur/50.))*(pi/4)
  • x=100+90*cos(a)
  • y=105-90*sin(a)
  • self.delete(aiguille)
  • self.delete(txt)
  • aiguille=self.create_line(100,105,x,y,width=1,fill="red")
  • txt=can.create_text(12,160, text=int(valeur) )
  • parent.update()
  • time.sleep(0.002) #Définie l'inertie de l'aiguille (Timer)
  • def SetMinValue(self,valeur):
  • global valmin
  • try:
  • self.delete(valmin)
  • except:
  • pass
  • valmin=self.create_text(30,30,text=str(valeur))
  • def SetMaxValue(self,valeur):
  • global valmax
  • try:
  • self.delete(valmax)
  • except:
  • pass
  • valmax=self.create_text(170,30,text=str(valeur))
  • def SetUnit(self,unite):
  • global unit
  • try:
  • self.delete(unit)
  • except:
  • pass
  • unit=self.create_text(100,50,text=str(unite))
  • def AddScale(self,nombre):
  • b=0
  • self.delete(ALL)
  • self.create_rectangle(0,0,200,200,fill="white",outline="white")
  • self.create_rectangle(10,10,190,150,width=2,fill="white")
  • self.create_rectangle(10,120,190,150,width=2,fill="grey")
  • self.create_oval(25,25,175,175,width=2)
  • self.create_rectangle(12,60,188,118,fill="white",outline="white")
  • self.create_rectangle(12,121,188,148,fill="grey",outline="grey")
  • self.create_rectangle(10,151,190,200,fill="white",outline="white")
  • self.create_oval(90,125,110,145, width=2,fill="white")
  • self.create_line(108,127,92,143,width=5)
  • self.create_oval(95,100,105,110,fill="red",outline="red")
  • a=(3-(0/50.))*(pi/4)
  • x=100+90*cos(a)
  • y=105-90*sin(a)
  • aiguille=self.create_line(100,105,x,y,width=1,fill="red")
  • txt=self.create_text(12,160, text="0")
  • while (b<=100):
  • a=(3-(b/50.))*(pi/4)
  • x1=100+90*cos(a)
  • y1=105-90*sin(a)
  • x2=100+85*cos(a)
  • y2=105-85*sin(a)
  • self.create_line(x1,y1,x2,y2)
  • b=b+(100/(nombre-1))
  • def RemScale(self):
  • self.delete(ALL)
  • self.create_rectangle(0,0,200,200,fill="white",outline="white")
  • self.create_rectangle(10,10,190,150,width=2,fill="white")
  • self.create_rectangle(10,120,190,150,width=2,fill="grey")
  • self.create_oval(25,25,175,175,width=2)
  • self.create_rectangle(12,60,188,118,fill="white",outline="white")
  • self.create_rectangle(12,121,188,148,fill="grey",outline="grey")
  • self.create_rectangle(10,151,190,200,fill="white",outline="white")
  • self.create_oval(90,125,110,145, width=2,fill="white")
  • self.create_line(108,127,92,143,width=5)
  • self.create_oval(95,100,105,110,fill="red",outline="red")
  • a=(3-(0/50.))*(pi/4)
  • x=100+90*cos(a)
  • y=105-90*sin(a)
  • aiguille=self.create_line(100,105,x,y,width=1,fill="red")
  • txt=self.create_text(12,160, text="0")
# -*- coding: cp1252 -*-
# Galvanomètre développé pour la librairie Tkinter
# Ecrit et immaginé par Amaury
# Yvan : ajouté la version non linéaire


from Tkinter import *
from math import *
import time
import random
class Galva(Canvas):
    def __init__(self,parent):
        global valeur,root,aiguille,txt
        root=parent
        valeur=0.
        b=0
        a=0

        Canvas.__init__(self)
        #Dessin du Galva
        self.create_rectangle(0,0,200,200,fill="white",outline="white")
        self.create_rectangle(10,10,190,150,width=2,fill="white")
        self.create_rectangle(10,120,190,150,width=2,fill="grey")
        self.create_oval(25,25,175,175,width=2)
        self.create_rectangle(12,60,188,118,fill="white",outline="white")
        self.create_rectangle(12,121,188,148,fill="grey",outline="grey")
        self.create_rectangle(10,151,190,200,fill="white",outline="white")
        self.create_oval(90,125,110,145, width=2,fill="white")
        self.create_line(108,127,92,143,width=5)
        self.create_oval(95,100,105,110,fill="red",outline="red")
        a=(3-(0/50.))*(pi/4)
        x=100+90*cos(a)
        y=105-90*sin(a)
        aiguille=self.create_line(100,105,x,y,width=1,fill="red")
        txt=self.create_text(12,160, text="0")
            
        parent.update()

    def SetValue(self,consigne):
        global valeur,root,aiguille,txt
        parent=root
        
        while (int(valeur*100+.5)!=int(consigne*100+.5)):
            if (valeur<consigne):
                valeur=valeur+(float(consigne-valeur)/50)
                float (valeur)
                a=(3-(valeur/50.))*(pi/4)
                x=100+90*cos(a)
                y=105-90*sin(a)
                self.delete(aiguille)
                self.delete(txt)
                aiguille=self.create_line(100,105,x,y,width=1,fill="red")
                txt=self.create_text(12,160, text=int(valeur) )
                parent.update()
                time.sleep(0.002)       #Définie l'inertie de l'aiguille (Timer)
                

            elif(valeur>consigne):
                valeur=valeur+(float(consigne-valeur)/50)
                float (valeur)
                a=(3-(valeur/50.))*(pi/4)
                x=100+90*cos(a)
                y=105-90*sin(a)
                self.delete(aiguille)
                self.delete(txt)
                aiguille=self.create_line(100,105,x,y,width=1,fill="red")
                txt=self.create_text(12,160, text=int(valeur) )
                parent.update()
                time.sleep(0.002)       #Définie l'inertie de l'aiguille (Timer)
                

            else:
                float (valeur)
                a=(3-(valeur/50.))*(pi/4)
                x=100+90*cos(a)
                y=105-90*sin(a)
                self.delete(aiguille)
                self.delete(txt)
                aiguille=self.create_line(100,105,x,y,width=1,fill="red")
                txt=can.create_text(12,160, text=int(valeur) )
                parent.update()
                time.sleep(0.002)       #Définie l'inertie de l'aiguille (Timer)

    def SetMinValue(self,valeur):
        global valmin
        try:
            self.delete(valmin)
        except:
            pass
        valmin=self.create_text(30,30,text=str(valeur))

    def SetMaxValue(self,valeur):
        global valmax
        try:
            self.delete(valmax)
        except:
            pass
        valmax=self.create_text(170,30,text=str(valeur))

    def SetUnit(self,unite):
        global unit
        try:
            self.delete(unit)
        except:
            pass
        unit=self.create_text(100,50,text=str(unite))

    def AddScale(self,nombre):
        b=0
        self.delete(ALL)
        self.create_rectangle(0,0,200,200,fill="white",outline="white")
        self.create_rectangle(10,10,190,150,width=2,fill="white")
        self.create_rectangle(10,120,190,150,width=2,fill="grey")
        self.create_oval(25,25,175,175,width=2)
        self.create_rectangle(12,60,188,118,fill="white",outline="white")
        self.create_rectangle(12,121,188,148,fill="grey",outline="grey")
        self.create_rectangle(10,151,190,200,fill="white",outline="white")
        self.create_oval(90,125,110,145, width=2,fill="white")
        self.create_line(108,127,92,143,width=5)
        self.create_oval(95,100,105,110,fill="red",outline="red")
        a=(3-(0/50.))*(pi/4)
        x=100+90*cos(a)
        y=105-90*sin(a)
        aiguille=self.create_line(100,105,x,y,width=1,fill="red")
        txt=self.create_text(12,160, text="0")
        while (b<=100):
            a=(3-(b/50.))*(pi/4)
            x1=100+90*cos(a)
            y1=105-90*sin(a)
            x2=100+85*cos(a)
            y2=105-85*sin(a)
            self.create_line(x1,y1,x2,y2)
            b=b+(100/(nombre-1))

    def RemScale(self):
        self.delete(ALL)
        self.create_rectangle(0,0,200,200,fill="white",outline="white")
        self.create_rectangle(10,10,190,150,width=2,fill="white")
        self.create_rectangle(10,120,190,150,width=2,fill="grey")
        self.create_oval(25,25,175,175,width=2)
        self.create_rectangle(12,60,188,118,fill="white",outline="white")
        self.create_rectangle(12,121,188,148,fill="grey",outline="grey")
        self.create_rectangle(10,151,190,200,fill="white",outline="white")
        self.create_oval(90,125,110,145, width=2,fill="white")
        self.create_line(108,127,92,143,width=5)
        self.create_oval(95,100,105,110,fill="red",outline="red")
        a=(3-(0/50.))*(pi/4)
        x=100+90*cos(a)
        y=105-90*sin(a)
        aiguille=self.create_line(100,105,x,y,width=1,fill="red")
        txt=self.create_text(12,160, text="0")

Conclusion

Ce programme peut être utilisé à l'intérieur d'une autre application graphique.
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

08 juin 2008 09:54:05 :
L'aiguille adopte désormais un comportement plus réaliste, en ne "sautant" plus d'une valeur à l'autre mais en simulant réellement un galvanomètre.
08 juin 2008 09:55:37 :
edit
08 juin 2008 13:37:17 :
Correction période de rafraichissement
10 juin 2008 20:34:28 :
Comportement plus réaliste
27 novembre 2008 20:33:02 :
Mise en forme avec une classe
04 février 2009 17:34:20 :
Ajout de graduations et affichage des valeurs limites

Commentaires et avis

signaler à un administrateur
Commentaire de actionv le 09/06/2008 10:52:09

Très bonne idée. J'ai ajouté un comportement non linéaire qui ressemble plus aux galvas.

voici les modifs :

while (int(valeur*100+.5)!=int(consigne*100+.5)):
dans le if:
valeur=valeur+(float(consigne-valeur)/50)
dans le elif:
valeur=valeur+(float(consigne-valeur)/50)

Dans tous les create_text:
txt=can.create_text(12,160, text=int(valeur) )
Je l'envoie par email.
AOC90

signaler à un administrateur
Commentaire de xeolin le 22/06/2008 01:28:16 10/10

Tres bonne source.

C'est simpas de partager :) ca poura etre utile pour un code que moi et Area vont faire... (afficheur tres intuitif)

Xeolin

signaler à un administrateur
Commentaire de aera group le 24/06/2008 14:58:45

C'est vrai ca peut être utile, un peu "gadget" mais bon .... Bonne source mais je me refuse de noter un afficher seul - Il n'a d'utilité que dans une application complette, or je n'en voi pas - Ceci étant, ta source reste tout à fait correcte !

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

scrollbar dans scrollbox avec TKinter [ par MHI ] Est-ce que quelqu'un sait comment ajouter les scrollbar à une scrollbox :J'ai essayé ceci :lstFile = Tkinter.Listbox(frmMain)lstFile.place(x = 20, y = checkButton avec TKinter [ par MHI ] comment faire pour tester si un checkButton est coché ? Probleme avec TKinter [ par titasse ] Bonjour, je debute en python. J'ai un probleme lorsque je veux importer TKinter avec la commande from TKinter import * j'ai le message suivant : Imp au sujet de Tkinter et le module turtle [ par nico1900 ] from turtle import *forward(120)left(90)&nbsp;color('red')&nbsp;forward(80)bon en fait je voulais tester le module turtle&nbsp;avec&nbsp;l e code ci-d Un Canvas comme dans Tkinter, mais pour wxPython [ par samurize ] Slt tout le monde. &nbsp; Voila tout est dans le titre (ou a peu pres&nbsp; ) : &nbsp; Je suis &#224; la recherche d'un module pouvant s'integrer da Taille de widgets sous Tkinter [ par Uims ] Bonjour, Quelqu"un saurait comment definir la taille d'un widgets sous tkinter??? Exemple: fen 1 = Tk(taille=600) J'espere que je me fait comprend Ouverture d'un fichier windows (avec Tkinter) [ par Uims ] Bonjour, Je travaille sous python et Tkinter et j'aurai voulu savoir comment dire a python de demarrer (comme on clique sur un fichier) une applicati Tkinter et Python [ par Telimektar1er ] Voila j'ai commenc&#233; e python il y a une semaine et jusqu &#224; aujourd'hui aucun probl&#232;me. Mais voil&#224;, je viens de commencer la cr&#23 help, faire un mastermind en python et en tkinter avant le 24 !!! [ par Crick132 ] je suis &#233;tudiante en 2&#232;me ann&#233;e, je dois r&#233;aliser un mastermind en python avec 8 couleurs et 5 combinaisons possibles.si quelqu'un Importer une image dans Tkinter... [ par skools ] Bonjour à tous, Et pardon à ceux à qui j'ai envoyé des messages perso, je n'arrivais pas à poster un suget dans le forum... Voilà, après des heures d


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,359 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.