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

Tkinter Python Discussion :

Changer état variable avec bouton


Sujet :

Tkinter Python

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Apprentis technicien maitneance
    Inscrit en
    Juillet 2020
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Apprentis technicien maitneance
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2020
    Messages : 12
    Points : 7
    Points
    7
    Par défaut Changer état variable avec bouton
    Bonjour

    J'aimerai changer l'état d'une variable (de False a True) a l'aide d'un bouton.

    Cordialement.

  2. #2
    Nouveau Candidat au Club
    Inscrit en
    Novembre 2011
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Novembre 2011
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    mavar est un booleen = vrai
    
    // clic sur bouton  btn_changer
    si mavar = vrai alors
        mavar= faux
    sinon
        mavar=vrai
    fin

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Apprentis technicien maitneance
    Inscrit en
    Juillet 2020
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Apprentis technicien maitneance
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2020
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    J'ai écrit ceci cela ne change rien quand j'appuie sur mon bouton


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if portouvert == False:
            portouvert = True
    voici le message d'erreur

    if portouvert == False: UnboundLocalError: local variable 'portouvert' referenced before assignment

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Cliquer sur un Button appelle un "callback" qui est, à priori, une fonction et si la variable portouvert n'a pas une durée de vie plus grande que la fonction impossible de la modifier suivant son état courant (elle n'existe pas en dehors de la fonction).
    Lorsqu'on débute, on utilise des variables globales (dans ce cas là).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Apprentis technicien maitneance
    Inscrit en
    Juillet 2020
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Apprentis technicien maitneance
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2020
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    Voici mon code dans connexion j'aimerai changer la variables.

    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
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    # -*-coding:Utf-8 -*
    from tkinter import *
    import serial
    import time
    ser = serial.Serial()
    ser.baudrate = 115200
    ser.port = 'COM10'
     
    #Commande
     
    portouvert = False
     
    def monter():
        ser.write(b'G91\n')
        ser.write(b'G1 Z10.000 F1200\n')
        ser.write(b'G90\n')
     
    def descend():
        ser.write(b'G91\n')
        ser.write(b'G1 Z-10.000 F1200\n')
        ser.write(b'G90\n')
     
    def demande_temp():
        ser.write(b'M105\n')
        data = ser.readline()
        if data.startswith(b'ok T'):
            print(data)
            texte_temp.set("Temperature Extrudeuse : "+str(data[5:10]))
     
    while(portouvert == True):
        ser.write(b'M105\n')
        data = ser.readline()
        texte_temp.set("Temperature Extrudeuse : "+str(data[5:10]))
        if data.startswith(b'ok T'):
            print(data)
     
     
     
    def connexion():
        ser.open()
        if portouvert == False:
            portouvert = True
     
    def deconnexion():
        ser.close()
        portouvert = False
     
     
     
    #GUI
    root=Tk()
    root.title("Imprimante 3D")
    root.geometry("800x480")
    root.minsize(480, 260)
    root.config(background='#C9C3AB')
     
    #frame
    frpr = Frame(root, bg='#C9C3AB')
    frpr.pack(expand=YES)
     
    frcon = LabelFrame(frpr, text="Connexction", padx=20, pady=20)
    frcon.pack(fill="both", expand="yes")
     
    frtemp = LabelFrame(frpr, text="Température", padx=20, pady=20)
    frtemp.pack(fill="both", expand="yes")
     
     
    #Bp, Label, ...
    #frpr
    bp_10 = Button(frpr, text="10", font=("Courrier", 14),command=monter,bg='white',fg='#C9C3AB')
    bp_10.pack(pady=5,fill=X)
     
     
    b_10 = Button(frpr, text="-10", font=("Courrier", 14),command=descend,bg='white',fg='#C9C3AB')
    b_10.pack(pady=5,fill=X)
     
    s = Spinbox(frpr, from_=0, to=300)
    s.pack()
     
    #frcon
    bpconnexion = Button(frcon, text="Connecter", font=("Courrier", 14),command=connexion,bg='white',fg='#C9C3AB')
    bpconnexion.pack(pady=5,fill=X)
     
    bpdeconnexion = Button(frcon, text="Déconnecter", font=("Courrier", 14),command=deconnexion,bg='white',fg='#C9C3AB')
    bpdeconnexion.pack(pady=5,fill=X)
     
    #frtemp
    bptemp = Button(frtemp, text="Temperature", font=("Courrier", 14),command=demande_temp,bg='white',fg='#C9C3AB')
    bptemp.pack(pady=5,fill=X)
     
    texte_temp = StringVar()
    texte_temp.set("Température Extrudeuse : ")
    label_temp = Label(frtemp, textvariable=texte_temp, bg="grey")
    label_temp.pack(pady=5,fill=X)
     
     
    root.mainloop()

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Votre variable ne sert à rien puisque vous avez déjà ser auquel vous pouvez appliquer les méthode .open, .close et tester l'état via .is_open (voir la documentation de serial).

    Si vous tenez à gérer l'état du port dans une variable à part, il faut apprendre à utiliser les variables globales (et ouvrir un tuto., dans le Swinnen, c'est ce chapitre).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Apprentis technicien maitneance
    Inscrit en
    Juillet 2020
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Apprentis technicien maitneance
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2020
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,

    Votre variable ne sert à rien puisque vous avez déjà ser auquel vous pouvez appliquer les méthode .open, .close et tester l'état via .is_open (voir la documentation de serial).

    Si vous tenez à gérer l'état du port dans une variable à part, il faut apprendre à utiliser les variables globales (et ouvrir un tuto., dans le Swinnen, c'est ce chapitre).

    - W
    Merci bien mais je n'arrive pas a mettre comme vous dites ser.is_open() Merci de m'aider

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par DJAlexOfficiel Voir le message
    Merci bien mais je n'arrive pas a mettre comme vous dites ser.is_open()
    C'est vous qui programmez, donc vous avez pris soin de reproduire chez vous l'exemple donné dans la documentation pour vérifier que vous êtes capable de le faire fonctionner et qu'il fonctionne.

    Si ser.is_open() sort un message d'erreur, il serait bon de l'indiquer (et de poster le code que vous avez réalisé)..
    Mais ce message devrait quand même vous être familier car vous l'avez certainement rencontré lorsque vous avez fait les exercices proposés dans votre tuto. favori.

    Ceci dit, comme on espère que les exemples de la documentation fonctionnent, une erreur devrait vous inciter à relire le code de l'exemple pour vérifier que vous avez bien tapé la même chose.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Apprentis technicien maitneance
    Inscrit en
    Juillet 2020
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Apprentis technicien maitneance
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2020
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    C'est vous qui programmez, donc vous avez pris soin de reproduire chez vous l'exemple donné dans la documentation pour vérifier que vous êtes capable de le faire fonctionner et qu'il fonctionne.

    Si ser.is_open() sort un message d'erreur, il serait bon de l'indiquer (et de poster le code que vous avez réalisé)..
    Mais ce message devrait quand même vous être familier car vous l'avez certainement rencontré lorsque vous avez fait les exercices proposés dans votre tuto. favori.

    Ceci dit, comme on espère que les exemples de la documentation fonctionnent, une erreur devrait vous inciter à relire le code de l'exemple pour vérifier que vous avez bien tapé la même chose.

    - W
    Le point derange erreur je met parenthese pareil et guillemets pareil
    def tempde():
    global ser.is_open

  10. #10
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par DJAlexOfficiel Voir le message
    Le point derange erreur je met parenthese pareil et guillemets pareil
    Chez moi, si je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> import serial
    >>> ser = serial.Serial()
    >>> ser.is_open
    False
    >>>
    çà fonctionne comme documenté et sans problème.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Apprentis technicien maitneance
    Inscrit en
    Juillet 2020
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Apprentis technicien maitneance
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2020
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Chez moi, si je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> import serial
    >>> ser = serial.Serial()
    >>> ser.is_open
    False
    >>>
    çà fonctionne comme documenté et sans problème.

    - W
    moi aussi cela fonctionne mais pour limporter dans code comment je fait

  12. #12
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par DJAlexOfficiel Voir le message
    moi aussi cela fonctionne mais pour limporter dans code comment je fait
    Si vous avez déjà écrit des fonctions comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    def demande_temp():
        ser.write(b'M105\n')
        data = ser.readline()
        if data.startswith(b'ok T'):
            print(data)
            texte_temp.set("Temperature Extrudeuse : "+str(data[5:10]))
    difficile de savoir quelle difficulté vous rencontrez.

    Surtout si vous ne postez pas le code que vous avez essayé de faire et que vous ne cherchez pas à comprendre pourquoi Python n'en veut pas.

    note: programmer, c'est comme tout: on fait des erreurs, on essaie de comprendre pourquoi et on corrige.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  13. #13
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 823
    Points : 7 119
    Points
    7 119
    Par défaut
    Il faut peut-être penser d'une manière un peu différente avec ser.is_open

    Par exemple,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    def connexion():
        ser.open()
        if portouvert == False: 
            portouvert = True
    deviendrait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    def connexion():
        if not ser.is_open():
            ser.open()
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

Discussions similaires

  1. Changer format variable avec STATA
    Par Noiram94 dans le forum Autres Logiciels
    Réponses: 0
    Dernier message: 10/10/2016, 11h57
  2. [Blend] Comment revenir à l'état initial avec le même bouton ?
    Par vhellers dans le forum Windows Presentation Foundation
    Réponses: 11
    Dernier message: 23/09/2008, 17h15
  3. changer la valeur d'une variable avec 2 bouton
    Par toutounesan_bg dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 03/08/2007, 10h51
  4. Problèmes dimensions boutons variable avec browser
    Par vano dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 08/08/2006, 11h37
  5. Problèmes dimensions boutons variable avec browser
    Par vano dans le forum Servlets/JSP
    Réponses: 0
    Dernier message: 07/08/2006, 15h08

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