begin process at 2010 09 04 17:52:32
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Graphique

 > GALVANOMÈTRE

GALVANOMÈTRE


 Information sur la source

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
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é :3 523 / 125

Auteur : amaury74

Ecrire un message privé
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

Les Membres Club peuvent 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

 Sources du même auteur

Source avec Zip Source avec une capture LES CONTES DE MONTE CRYPTO
Source avec Zip Source avec une capture CALCUL DE RÉSISTANCES
Source avec Zip Source avec une capture BENCHMARK PAR LE CALCUL DE PI MULTITHREAD
Source avec Zip Source avec une capture BENCHMARK PAR LE CALCUL DE PI
Source avec Zip Source avec une capture PROGRESS BAR POUR TKINTER

 Sources de la même categorie

Source avec Zip Source avec une capture PYGTK : CODES ET EXPLICATIONS POUR DÉBUTER par loloof64
TK_WATCH :HORLOGE GRAPHIQUE par afranck64
Source avec une capture DESSIN DE DÉS À ÉCHELLE VARIABLE SUR CANVAS par calogerogigante
BOITE DE CONNEXION USER/PASSWORD POUR PYTHON:TK_LOGIN par afranck64
Source avec Zip Source avec une capture CALCUL DE RÉSISTANCES par amaury74

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture CASSE BRIQUE par elnabo
Source avec Zip CALCULATRICE SIMPLICISTE SOUS TKINTER par elnabo
Source avec Zip WIDGET TKINTER par gaulthier
Source avec Zip Source avec une capture PROGRESS BAR POUR TKINTER par amaury74
Source avec Zip Source avec une capture ENSSEMBLE DE TROIS WIDGETS AFFICHEURS POUR TKINTER: AFF7SEG,... par amaury74

Commentaires et avis

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

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

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

Septembre 2010
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
27282930   

Consulter la suite du CalendriCode

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,811 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales