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 :

bouton qui se lance sans que j'appuie la première fois et qui ne fonctionnent plus après


Sujet :

Python

  1. #1
    Membre confirmé
    Homme Profil pro
    support technique
    Inscrit en
    Mars 2020
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : support technique

    Informations forums :
    Inscription : Mars 2020
    Messages : 79
    Par défaut bouton qui se lance sans que j'appuie la première fois et qui ne fonctionnent plus après
    Bonjour à toutes et tous

    Je génère 10 boutons et je voudrais que quand il appuie dessus il m'affiche que j'ai appuyé dessus.

    En général quand je génère le bouton normalement btn1, btn2, ... cela fonctionne là j'ai essayé de btni, avec i qui varie de 0 à 9, et du coup cela ne fonctionne plus.

    Comme je ne sais pas combien de bouton j'aurais besoin j'essaie avec le range (0,9) mais normalement ce sera avec un len(...)

    mon code est ici :
    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
    from tkinter import Tk, Button
     
    mesure_choisie = []
     
     
    def export(i):
        print("j'ai appuyé sur le bouton : ", i)
        mesure_choisie.append(i)
     
     
    def ecrit_mesure():
        print(mesure_choisie)
    mesure = Tk()
    mesure.title("Choix des mesures à incorporer dans le pdf")
    mesure.geometry("900x900")
    ypos = 0
    xpos = 0
    for i in range (0,9):
        mod = i % 3
        if mod == 0:
            xpos = 30
            ypos = ypos + 70
        if mod == 1:
            xpos = 230
        if mod == 2:
            xpos = 430
        btni = "btn" + str(i)
        print("le nom du bouton est : ", btni)
        temp = 'bonjour Mr : ' + str(i)
        btni = Button(mesure, text=btni + ' / ' + temp, command=export(i), bg='green')
        btni.place(x=xpos, y=ypos, width=180)
     
    btn_valide = Button(mesure, text="Valider les mesures",
                        command=ecrit_mesure(), bg='red')
    btn_valide.place(x=750, y=750, height=60, width=120)
     
    mesure.mainloop()
    Et quand je l'exécute il affiche de suite que j'ai appuyé sur chacun des boutons et il ne tient pas compte de mes divers appuie ultérieurs.

    Sauriez vous me dire ou le bat blesse ?

    Merci d'avance

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 790
    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 790
    Par défaut
    Salut,

    Citation Envoyé par figuedi Voir le message
    Sauriez vous me dire ou le bat blesse ?
    Si export est une fonction, export(i) appelle la fonction. Du coup, command=export(i) passe le résultat de la fonction.
    J'ai décrit les solutions à explorer dans cette discussion récente.

    note: si tkinter a aussi grid ou pack, c'est que place n'est une option parmi d'autre... mais si ça vous amuse de réinventer la roue

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

  3. #3
    Membre confirmé
    Homme Profil pro
    support technique
    Inscrit en
    Mars 2020
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : support technique

    Informations forums :
    Inscription : Mars 2020
    Messages : 79
    Par défaut
    Le problème c’est que lors de l’exécution il active la fonction export avec les 10 boutons à la suite tout seul et qu’après quand j’appuie sur un des boutons il ne fait rien

  4. #4
    Membre confirmé
    Homme Profil pro
    support technique
    Inscrit en
    Mars 2020
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : support technique

    Informations forums :
    Inscription : Mars 2020
    Messages : 79
    Par défaut
    ok merci, pour la solution avec lambda
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        btni = Button(mesure, text=btni + ' / ' + temp, command=lambda: export(btni),
                      bg='green')
    cela fonctionne nickel

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 871
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par figuedi Voir le message
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    btni = "btn" + str(i)
    temp = 'bonjour Mr : ' + str(i)
    text=btni + ' / ' + temp
    text="btn{0} / bonjour Mr : {0}".format(i)...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 790
    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 790
    Par défaut
    Citation Envoyé par figuedi Voir le message
    cela fonctionne nickel
    Si vous le dites... (pour moi, vous devriez constater des problèmes: testez encore!)

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

  7. #7
    Membre confirmé
    Homme Profil pro
    support technique
    Inscrit en
    Mars 2020
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : support technique

    Informations forums :
    Inscription : Mars 2020
    Messages : 79
    Par défaut
    Aucun soucis particulier de constaté, mais il est vrai que j'ai modifié 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
    ypos = 0
        xpos = 0
        color = "green"
        for i in range(0, len(df)):
            mod = i % 4
            if mod == 0:
                xpos = 30
                ypos = ypos + 70
            if mod == 1:
                xpos = 230
            if mod == 2:
                xpos = 430
            if mod == 3:
                xpos = 630
            btni = "btn" + str(i)
            temp = str(df_s.loc[i, 0:2].to_string(index=False))
            btni = Button(mesure, text=temp, bg=color)
            btni['command'] = lambda t=temp, btn=btni: export(t, btn)
            btni.place(x=xpos, y=ypos, width=180)
     
        btn_valide = Button(mesure, text="Valider les mesures",
                            command=lambda: ecrit_mesure(repertoire), bg='red')
        btn_valide.place(x=750, y=750, height=60, width=120)
     
        mesure.mainloop()
     
     
    def export(i, btni):
        itemp = i.split('\n')
        itemp2 = itemp[0] + ' ' + itemp[1].lstrip() + ' ' + itemp[2].lstrip()
        mesure_choisie.append(itemp2)
        btni['bg'] = 'blue'
    Etant en vacances sans internet si ce n'est le partage de connexion via le téléphone, je me documente sur ce dernier et code sur le portable.
    J'ai utilisé la fonction lambda pour passer l'index du bouton et la valeur que y était affichée je change la couleur du bouton une fois que l'on a appuyé dessus.
    Ce que je n'ai pas encore fait c,est la possibilité de supprimer la valeur si on reclique sur le bouton, je suis en train d'y réfléchir pour l'instant.

    Mais bon le code fonctionne pour le moment

  8. #8
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 871
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par figuedi Voir le message
    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
    ypos = 0
        xpos = 0
        color = "green"
        for i in range(0, len(df)):
            mod = i % 4
            if mod == 0:
                xpos = 30
                ypos = ypos + 70
            if mod == 1:
                xpos = 230
            if mod == 2:
                xpos = 430
            if mod == 3:
                xpos = 630
            btni = "btn" + str(i)
            temp = str(df_s.loc[i, 0:2].to_string(index=False))
            btni = Button(mesure, text=temp, bg=color)
            btni['command'] = lambda t=temp, btn=btni: export(t, btn)
            btni.place(x=xpos, y=ypos, width=180)
    
        btn_valide = Button(mesure, text="Valider les mesures",
                            command=lambda: ecrit_mesure(repertoire), bg='red')
        btn_valide.place(x=750, y=750, height=60, width=120)
    
        mesure.mainloop()
    
    
    def export(i, btni):
        itemp = i.split('\n')
        itemp2 = itemp[0] + ' ' + itemp[1].lstrip() + ' ' + itemp[2].lstrip()
        mesure_choisie.append(itemp2)
        btni['bg'] = 'blue'
    Mais bon le code fonctionne pour le moment
    Peut-être, mais vu qu'il est incomplet (variable "df" inconnue) on peut pas le reproduire. Et j'espère que le défaut de tabulation qui démarre à la ligne 2 provient juste d'une erreur de copier/coller.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  9. #9
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 790
    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 790
    Par défaut
    Citation Envoyé par figuedi Voir le message
    Aucun soucis particulier de constaté, mais il est vrai que j'ai modifié le code
    oui à la place du:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    command=lambda: export(btni)
    précédent, on y trouve:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    command=lambda t=temp, btn=btni: export(t, btn)

    Citation Envoyé par figuedi Voir le message
    Ce que je n'ai pas encore fait c,est la possibilité de supprimer la valeur si on reclique sur le bouton, je suis en train d'y réfléchir pour l'instant.
    Une listbox fait déjà tout çà... après si ça vous amuse de recoder ce qui existe déjà... mais si on regarde les choses d'un côté professionnel, on ne recode que si on a de bonnes raisons. Et si on a du temps à passer ce sera pour apprendre à mieux utiliser tkinter (par exemple).

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

  10. #10
    Membre confirmé
    Homme Profil pro
    support technique
    Inscrit en
    Mars 2020
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : support technique

    Informations forums :
    Inscription : Mars 2020
    Messages : 79
    Par défaut
    LE code en entier est ici avec la PJ a renommer txt vers dcm.

    Le but est de lire un fichier de mesures Dicom : Dicom SR

    Sauf que je n'ai pas trouvé de bibliothèque chez pynetdicom ou consort qui connaissent les nouveaux services tags du type de machine qui m'intérèsse.

    Aussi je me suis dit pourquoi pas.

    Pour info et vous l'auriez surement deviné, mes connaissances en informatique se limitent en un BTS info indus en 1992 ou je n'avais vu que de l'assembleur, mais bon à l'époque y avait pas encore beaucoup de langage de programmation abordé à l'école.

    Puis j'ai viré ma cotyle et je suis parti en ingénierie électronique plus particulièrement en hyperfréquences (liaison terre satellite entres autres mais pas que), sans jamais refaire de l'informatique. là je m'y mets juste car l'occasion fait le larron et que je trouve cela plus tot fun.

    Donc oui je réinvente surement tout en plus mal c'est certain, mais vu l'état de mes connaissances je ne peux pas faire mieux.

    Concernant le projet : le Dicom est norme de communication réseau dedié au médical (DIgital COmunication of Medicine) qui rassemble toutes les informations d'un examen médical (mesure imagerie, nom, type d'examen, ....)celon une certaine norme validée par l'ensemble des constructeurs et des institutions médicales.


    J'imagine que le fichier reçu est un fichier en binaire(mais je ne sais pas comment faire pour le lire directement si c'est possible et j'utilise highdicom ou pynetdicom pour transformer le fichier reçu en un truc plus ou moins exploitable, puis je récupère les services tags qui m'intéressent pour ne récupérer que les mesures dans cette partie là mais y aussi un traitement sur les images, les boucles, ...

    Le code ci dessous se lancera dès que le programme saura que c'est un fichier mesure et permettra à l'utilisateur de choisir les mesures qu'il veut, sachat qu'il est possible qu'il fasse plusieurs fois la même et qu'il veuille garder la moyene, le max le min ou en exclure certaines (j'en suis encore loin mais c'est plus ou moins l'idée)
    voili voilou vous savez tout.


    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
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    import highdicom as hd
    import pandas as pd
    from tkinter import Tk, Button
     
    mesure_choisie = []
     
    # Structured report file
    repertoire = "C:\\Dfi_5012\\Dcm\\catherine"
    img = "I000000024.dcm"  # SR
    path = repertoire + '\\' + img
     
     
    def convert_sr(path):
        global mesure
        # Read the file with Highdicom
        sr = hd.sr.srread(path)
     
    # Temp file to rescue only the name, measure and unity
        outputfile = repertoire + '\\text.txt'
        outputfile_mod = repertoire + '\\textmod.txt'
        outputfile_final = repertoire + '\\textfinal.txt'
     
    # Put the SR into a txt file
        with open(outputfile, 'w+') as f:
            f.write('%s\n' % str(sr))
     
    # supress lines without interesting information
        fichier_source = open(outputfile, "r")
        fichier_destination = open(outputfile_mod, "w")
     
        for ligne in fichier_source:
            temp = str(ligne).lstrip()
            if temp[:12] == "(0008, 0104)":
                fichier_destination.write(temp)
            elif temp[:12] == "(0040, a30a)":
                fichier_destination.write(temp)
        fichier_source.close()
        fichier_destination.close()
     
    # Format datas to be human being readable
        fichier_source = open(outputfile_mod, "r")
        fichier_destination = open(outputfile_final, "w")
        lines = fichier_source.readlines()
     
        for i in range(1, len(lines)):
            if lines[i][:12] == "(0040, a30a)":
                tmp = lines[i-2].split("'")
                fichier_destination.write(tmp[1])
                fichier_destination.write(",")
                tmp = lines[i].split("'")
                fichier_destination.write(tmp[1])
                fichier_destination.write(",")
                tmp = lines[i-1].split("'")
                fichier_destination.write(tmp[1])
                fichier_destination.write("\n")
     
        fichier_source.close()
        fichier_destination.close()
     
        df = pd.read_table(outputfile_final, sep=",", header=None)
        df = df.drop_duplicates()
        df_s = df.sort_values([0])
        df_s.reset_index(inplace=True, drop=True)
     
    # GUI Tkinter
        mesure = Tk()
        mesure.title("Choix des mesures à incorporer dans le pdf")
        mesure.geometry("900x900")
     
    # show text results with modulo 4 in order organize by 4 columns
        ypos = 0
        xpos = 0
        color = "green"
        for i in range(0, len(df)):
            mod = i % 4
            if mod == 0:
                xpos = 30
                ypos = ypos + 70
            if mod == 1:
                xpos = 230
            if mod == 2:
                xpos = 430
            if mod == 3:
                xpos = 630
            btni = "btn" + str(i)
            temp = str(df_s.loc[i, 0:2].to_string(index=False))
            btni = Button(mesure, text=temp, bg=color)
            btni['command'] = lambda t=temp, btn=btni: export(t, btn)
            btni.place(x=xpos, y=ypos, width=180)
        btn_valide = Button(mesure, text="Valider les mesures",
                            command=lambda: ecrit_mesure(repertoire), bg='red')
        btn_valide.place(x=750, y=750, height=60, width=120)
     
        mesure.mainloop()
     
     
    def export(i, btni):
        itemp = i.split('\n')
        itemp2 = itemp[0] + ' ' + itemp[1].lstrip() + ' ' + itemp[2].lstrip()
        mesure_choisie.append(itemp2)
        btni['bg'] = 'blue'
     
     
    def ecrit_mesure(chemin):
        global mesure
        fichier_mesure = chemin + "\\mesureselect.txt"
        with open(fichier_mesure, 'w+')as mf:
            for j in range(0, len(mesure_choisie)):
                temp = mesure_choisie[j]
                mf.write('%s\n' % temp)
        mesure.destroy()
     
     
    convert_sr(path)
    I000000024.dcm.txt

    L'idée de la listbox si cela fonctionne comme en vba sur excel ne me conviendra pas je pense mais plutôt une check box, à part bien évidement que ce soit la même chose.

    Merci en tout cas de vos conseils.

  11. #11
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 790
    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 790
    Par défaut
    Citation Envoyé par figuedi Voir le message
    Donc oui je réinvente surement tout en plus mal c'est certain, mais vu l'état de mes connaissances je ne peux pas faire mieux.
    Vos connaissances dépendent du temps passé à apprendre.

    Si vous voulez programmer avec tkinter, faire le tour de ce qu'on peut faire avec les différents widgets ne prend pas des plombes. D'autant qu'en cherchant un peu vous seriez tombé sur un site comme tkdocs qui permet de visualiser et donne des bouts de code.

    Le problème avec les applications, c'est que ça peut donner des idées aux utilisateurs (outre "je préférerais que..." on a des "ah mais si on peut faire ça ne pourrait-on pas avoir...": ils poussent l'enveloppe et il faut revoir le code pour y intégrer de nouvelles fonctionnalités.
    C'est pour çà qu'on compartimente: regardez votre fonction convert_sr, c'est un gros machin où il y a bien trop de choses impossibles à tester séparément. C'est aussi pour ça qu'on évite de ré-inventer la roue: çà fait plus de lignes à lire/comprendre. Si aujourd'hui, vous avez tout en tête, dans quelques semaines, ce sera indigeste et périlleux d'y toucher.

    Après vous faites ce que vous voulez/pouvez.... mais la programmation est un métier et pour tout métier sans maîtriser les bases, c'est pas gagné. Dans de nombreux métiers manuels, on risque de se blesser plus ou moins gravement. En codant, normalement, on ne met pas sa vie en danger... sauf qu'on épuise son cerveau qui a un moment donné dira "stop".

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

  12. #12
    Membre confirmé
    Homme Profil pro
    support technique
    Inscrit en
    Mars 2020
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : support technique

    Informations forums :
    Inscription : Mars 2020
    Messages : 79
    Par défaut
    Bon alors j'ai fait un peu de grid, j'ai mis du checkbox, mais j'ai toujours le même problème.

    Quand je coche une case il me met bien la valeur que je veux et quand je la décoche il ne la met pas
    Ce qui est tout a fait normal, mais j'aurais vachement aimé qu'il supprime la mesure qu'il avait précédemment mise,

    du coup j'ai essayé de faire un vari.get() à la fin mais il ne regarde que la dernière mesure
    j'ai essayé de faire un temp = "var"+str(i) puis un temp.get() mais il me dit que c'est une string et pas une variable et que donc il n'a pas de fonction get().

    bref je sèche un peu, si vous aviez une petite piste ce serait sympa.

    Merci d'avance

    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
    mesure = Tk()
        mesure.title("Choix des mesures à incorporer dans le pdf")
        mainframe = ttk.Frame(mesure, padding="3 3 12 12")
        mainframe.grid(column=0, row=0, sticky=(N, W, E, S))
        mesure.columnconfigure(0, weight=1)
        mesure.rowconfigure(0, weight=1)
     
     
    # show text results with modulo 4 in order organize by 4 columns
        col = 1
        lig = 0
        # color = "green"
        sti = (N, W, E, S)
        for i in range(0, len(df)):
            mod = i % 4
            if mod == 0:
                col = 1
                lig = lig + 1
            if mod == 1:
                col = 2
            if mod == 2:
                col = 3
            if mod == 3:
                col = 4
            temp = str(df_s.loc[i, 0:2].to_string(index=False))
            vari = "var" + str(i)
            vari = StringVar()
            Cbouton = ttk.Checkbutton(mainframe, text=temp, variable=vari,
                                      command=lambda v=vari: test(v),
                                      onvalue=temp, offvalue="")
            Cbouton.grid(column=col, row=lig, sticky=sti)
     
        btn_valide = Button(mainframe, text="Valider les mesures",
                            command=lambda: ecrit_mesure(repertoire),
                            bg='red', height=5, width=30)
        btn_valide.grid(column=4, row=lig+1, sticky=sti)
     
        for child in mainframe.winfo_children():
            child.grid_configure(padx=5, pady=5, ipadx=5, ipady=5)
     
        mesure.mainloop()
    def test(v):
        valeur.append(v.get())
        print(valeur)

  13. #13
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 871
    Billets dans le blog
    1
    Par défaut
    Désolé ton code n'est pas utilisable, erreur de tabulation en ligne 2. J'en ai déjà parlé mais visiblement ça ne t'intéresse pas donc moi non plus.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  14. #14
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 790
    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 790
    Par défaut
    Citation Envoyé par figuedi Voir le message
    bref je sèche un peu, si vous aviez une petite piste ce serait sympa.
    Votre code est bien trop incomplet pour qu'on puisse en tirer quoi que ce soit.
    Si vous partez à utiliser des checkbutton, il faut commencer par faire un petit exemple de code qui traduise l'interaction utilisateur.

    A priori, soit on valide et on regarde l'état des checkbutton pour construire la liste, soit on met à jour la liste à chaque changement d'état des checkbutton. Qu'avez vous essayé de faire, mystère...

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

  15. #15
    Membre confirmé
    Homme Profil pro
    support technique
    Inscrit en
    Mars 2020
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : support technique

    Informations forums :
    Inscription : Mars 2020
    Messages : 79
    Par défaut
    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
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    import highdicom as hd
    import pandas as pd
    from tkinter import Tk, Button, N, W, E, S, StringVar
    from tkinter import ttk
     
    global df_s
    mesure_choisie = []
    valeur = []
    # Structured report file
    repertoire = "C:\\Dfi_5012\\Dcm\\catherine"
    img = "I000000024.dcm"  # SR
    path = repertoire + '\\' + img
     
     
    def convert_sr(path):
        global mesure
        global df_s
        global vari
        # Read the file with Highdicom
        sr = hd.sr.srread(path)
     
    # Temp file to rescue only the name, measure and unity
        outputfile = repertoire + '\\text.txt'
        outputfile_mod = repertoire + '\\textmod.txt'
        outputfile_final = repertoire + '\\textfinal.txt'
     
    # Put the SR into a txt file
        with open(outputfile, 'w+') as f:
            f.write('%s\n' % str(sr))
     
    # supress lines without interesting information
        fichier_source = open(outputfile, "r")
        fichier_destination = open(outputfile_mod, "w")
     
        for ligne in fichier_source:
            temp = str(ligne).lstrip()
            if temp[:12] == "(0008, 0104)":
                fichier_destination.write(temp)
            elif temp[:12] == "(0040, a30a)":
                fichier_destination.write(temp)
        fichier_source.close()
        fichier_destination.close()
     
    # Format datas to be human being readable
        fichier_source = open(outputfile_mod, "r")
        fichier_destination = open(outputfile_final, "w")
        lines = fichier_source.readlines()
     
        for i in range(1, len(lines)):
            if lines[i][:12] == "(0040, a30a)":
                tmp = lines[i-2].split("'")
                fichier_destination.write(tmp[1])
                fichier_destination.write(",")
                tmp = lines[i].split("'")
                fichier_destination.write(tmp[1])
                fichier_destination.write(",")
                tmp = lines[i-1].split("'")
                fichier_destination.write(tmp[1])
                fichier_destination.write("\n")
     
        fichier_source.close()
        fichier_destination.close()
     
        df = pd.read_table(outputfile_final, sep=",", header=None)
        df = df.drop_duplicates()
        df_s = df.sort_values([0])
        df_s.reset_index(inplace=True, drop=True)
     
    # GUI Tkinter
        mesure = Tk()
        mesure.title("Choix des mesures à incorporer dans le pdf")
        mainframe = ttk.Frame(mesure, padding="3 3 12 12")
        mainframe.grid(column=0, row=0, sticky=(N, W, E, S))
        mesure.columnconfigure(0, weight=1)
        mesure.rowconfigure(0, weight=1)
     
     
    # show text results with modulo 4 in order organize by 4 columns
        col = 1
        lig = 0
        # color = "green"
        sti = (N, W, E, S)
        for i in range(0, len(df)):
            mod = i % 4
            if mod == 0:
                col = 1
                lig = lig + 1
            if mod == 1:
                col = 2
            if mod == 2:
                col = 3
            if mod == 3:
                col = 4
            temp = str(df_s.loc[i, 0:2].to_string(index=False))
            vari = "var" + str(i)
            vari = StringVar()
            Cbouton = ttk.Checkbutton(mainframe, text=temp, variable=vari,
                                      command=lambda v=vari: test(v),
                                      onvalue=temp, offvalue="")
            Cbouton.grid(column=col, row=lig, sticky=sti)
     
        btn_valide = Button(mainframe, text="Valider les mesures",
                            command=lambda: ecrit_mesure(repertoire),
                            bg='red', height=5, width=30)
        btn_valide.grid(column=4, row=lig+1, sticky=sti)
     
        for child in mainframe.winfo_children():
            child.grid_configure(padx=5, pady=5, ipadx=5, ipady=5)
     
        mesure.mainloop()
     
     
    def export(i):
        itemp = i.split('\n')
        itemp2 = itemp[0] + ' ' + itemp[1].lstrip() + ' ' + itemp[2].lstrip()
        mesure_choisie.append(itemp2)
        # btni['bg'] = 'blue'
     
     
    def test(vari):
        for i in range(0,len(df_s)):
            vari = "var" + str(i)
            vari.get()
        valeur.append(vari)
        print(valeur)
     
     
    def ecrit_mesure(chemin):
        mesure_choisie.append(valeur)
        fichier_mesure = chemin + "\\mesureselect.txt"
        with open(fichier_mesure, 'w+')as mf:
            for j in range(0, len(mesure_choisie)):
                temp = mesure_choisie[j]
                mf.write('%s\n' % temp)
        mesure.destroy()
     
     
    convert_sr(path)
    toutes mes excuses, le code est ci dessus, la pièce jointe est rajoutée également, le code devrait donc tourner.
    Si ce n'est qu'il ne tourne pas rond.
    Mon problème me semble être au niveau de la variable incrémentielle vari qui devrait être var0, var1, .....
    Comme je ne sais pas à l'avance combien de variable j'aurai besoin je n'ai trouvé que ce moyen en la construisant en faisant varier i sur le nombre de mesures et en la jouxtant avec le string var, mais python n'apprécie pas ma façon de procéder, me semble t il du moins
    Fichiers attachés Fichiers attachés

  16. #16
    Membre confirmé
    Homme Profil pro
    support technique
    Inscrit en
    Mars 2020
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : support technique

    Informations forums :
    Inscription : Mars 2020
    Messages : 79
    Par défaut
    Bon ça à l'air de marcher, je continue à tester mais ne vous cassez pas la tête plus que de rigueur, je pense avoir compris comment indexer mes checkbox

    juste une petite question comment puis je gérer cette erreur ?
    je sais que certaines valeurs de ma liste seront vides et il n'y aura donc pas de itempo1[0], [1] ou [2], du coup je lui fait faire un try suivi d'un except et dans le except je lui fait imprimer rien
    mais vu que ça ne sert a rien suis-je obligé de mettre un except ? et suis-je obligé de lui faire faire qqchose ?
    Ou y a t il un moyen de faire autrement ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
                try:
                    itempo2 = itempo1[0] + ' ' + itempo1[1].lstrip() + ' ' + itempo1[2].lstrip()
                    mesure_choisie.append(itempo2)
                except:
                    print("")
    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
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    import highdicom as hd
    import pandas as pd
    from tkinter import Tk, Button, N, W, E, S, StringVar
    from tkinter import ttk
    import tkinter as tk
     
    global df_s
    mesure_choisie = []
    valeur = []
    cb = []
    cb_v = []
    opt = []
    # Structured report file
    repertoire = "C:\\Dfi_5012\\Dcm\\catherine"
    img = "I000000024.dcm"  # SR
    path = repertoire + '\\' + img
     
     
    def convert_sr(path):
        global mesure
        global df_s
        global vari
        # Read the file with Highdicom
        sr = hd.sr.srread(path)
     
    # Temp file to rescue only the name, measure and unity
        outputfile = repertoire + '\\text.txt'
        outputfile_mod = repertoire + '\\textmod.txt'
        outputfile_final = repertoire + '\\textfinal.txt'
     
    # Put the SR into a txt file
        with open(outputfile, 'w+') as f:
            f.write('%s\n' % str(sr))
     
    # supress lines without interesting information
        fichier_source = open(outputfile, "r")
        fichier_destination = open(outputfile_mod, "w")
     
        for ligne in fichier_source:
            temp = str(ligne).lstrip()
            if temp[:12] == "(0008, 0104)":
                fichier_destination.write(temp)
            elif temp[:12] == "(0040, a30a)":
                fichier_destination.write(temp)
        fichier_source.close()
        fichier_destination.close()
     
    # Format datas to be human being readable
        fichier_source = open(outputfile_mod, "r")
        fichier_destination = open(outputfile_final, "w")
        lines = fichier_source.readlines()
     
        for i in range(1, len(lines)):
            if lines[i][:12] == "(0040, a30a)":
                tmp = lines[i-2].split("'")
                fichier_destination.write(tmp[1])
                fichier_destination.write(",")
                tmp = lines[i].split("'")
                fichier_destination.write(tmp[1])
                fichier_destination.write(",")
                tmp = lines[i-1].split("'")
                fichier_destination.write(tmp[1])
                fichier_destination.write("\n")
     
        fichier_source.close()
        fichier_destination.close()
     
        df = pd.read_table(outputfile_final, sep=",", header=None)
        df = df.drop_duplicates()
        df_s = df.sort_values([0])
        df_s.reset_index(inplace=True, drop=True)
     
    # GUI Tkinter
        mesure = Tk()
        mesure.title("Choix des mesures à incorporer dans le pdf")
        mainframe = ttk.Frame(mesure, padding="3 3 12 12")
        mainframe.grid(column=0, row=0, sticky=(N, W, E, S))
        mesure.columnconfigure(0, weight=1)
        mesure.rowconfigure(0, weight=1)
     
     
    # show text results with modulo 4 in order organize by 4 columns
        col = 1
        lig = 0
        # color = "green"
        sti = (N, W, E, S)
        for i in range(0, len(df)):
            mod = i % 4
            if mod == 0:
                col = 1
                lig = lig + 1
            if mod == 1:
                col = 2
            if mod == 2:
                col = 3
            if mod == 3:
                col = 4
            temp = str(df_s.loc[i, 0:2].to_string(index=False))
            cb_v.append(tk.StringVar())
            off_value = ""
            cb.append(tk.Checkbutton(mainframe, text=temp, onvalue=temp,
                                     offvalue=off_value, variable=cb_v[i],
                                     command=chkbox_checked))
            opt.append(off_value)
            cb[i].grid(column=col, row=lig, sticky=sti)
     
        btn_valide = Button(mainframe, text="Valider les mesures",
                            command=lambda: ecrit_mesure(repertoire),
                            bg='red', height=5, width=30)
        btn_valide.grid(column=4, row=lig+1, sticky=sti)
     
        for child in mainframe.winfo_children():
            child.grid_configure(padx=5, pady=5, ipadx=5, ipady=5)
     
        mesure.mainloop()
     
     
    def chkbox_checked():
        for i, item in enumerate(cb):
            opt[i] = (cb_v[i].get())
        print(opt)
     
     
    def ecrit_mesure(chemin):
        for itemp in opt:
            itempo = itemp.split(',')
            for itempoo in itempo:
                itempo1 = itempoo.split('\n')
                try:
                    itempo2 = itempo1[0] + ' ' + itempo1[1].lstrip() + ' ' + itempo1[2].lstrip()
                    mesure_choisie.append(itempo2)
                except:
                    print("")
     
        fichier_mesure = chemin + "\\mesureselect.txt"
        with open(fichier_mesure, 'w+')as mf:
            for j in range(0, len(mesure_choisie)):
                temp = mesure_choisie[j]
                mf.write('%s\n' % temp)
        mesure.destroy()
     
     
    convert_sr(path)

  17. #17
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 871
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par figuedi Voir le message
    juste une petite question comment puis je gérer cette erreur ?
    je sais que certaines valeurs de ma liste seront vides et il n'y aura donc pas de itempo1[0], [1] ou [2], du coup je lui fait faire un try suivi d'un except et dans le except je lui fait imprimer rien
    mais vu que ça ne sert a rien suis-je obligé de mettre un except ? et suis-je obligé de lui faire faire qqchose ?
    Un try/except ne sert pas à rien, il sert à récupérer une exception attendue dont on ne veut pas qu'elle fasse planter le programme.
    Le except doit mpérativement être relié à une instruction. Si tu n'as rien à lui faire faire (ce qui n'est pas synonyme de "il ne sert à rien") tu lui mets l'instruction neutre pass.
    Et généralement on cible l'exception attendue (ce qui permet au programme de planter "normalement" si autre chose se produit) et on ne met dans le "try" uniquement l'instruction qui peut provoquer l'exception. Le .append() n'étant pas en cause, lui il doit sortir (tu as la clause "else" pour traiter ce cas)
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    try:
    	itempo2 = "%s %s %s" % (itempo1[0], itempo1[1].lstrip(), itempo1[2].lstrip())
    except IndexError:
    	pass
    else:
    	mesure_choisie.append(itempo2)
    Bon évidemment, ici itempo2 étant clairement inutile, la clause "else" l'est aussi...
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    try:
    	mesure_choisie.append("%s %s %s" % (itempo1[0], itempo1[1].lstrip(), itempo1[2].lstrip()))
    except IndexError:
    	pass

    Citation Envoyé par figuedi Voir le message
    Ou y a t il un moyen de faire autrement ?
    Déjà il ne faut pas confondre "valeur vide" et "valeur inexistante". Si itempo (une liste) contient 3 valeurs, elles seront accessibles via les indices 0, 1 et 2 et cela ne provoquera pas d'exception, même si ces valeurs sont "chaine vide".
    Si ensuite itempo ne contient que 2 valeurs, alors l'accès à l'indice 2 provoquera un IndexError mais tu peux le checker en regardant len(itempo) et en adaptant en conséquence. Parce qu'avec le try c'est "j'ai 3 valeurs et je génère un résultat ou je n'en ai pas 3 et je ne génère rien" tandis qu'avec un check plus fin ça peut devenir "j'ai 3 valeurs et je génère un résultat complet ou je n'en ai que 2 et je génère quand-même un résultat même incomplet".
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  18. #18
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 790
    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 790
    Par défaut
    Citation Envoyé par figuedi Voir le message
    mais vu que ça ne sert a rien suis-je obligé de mettre un except ? et suis-je obligé de lui faire faire qqchose ?
    Ou y a t il un moyen de faire autrement ?
    Vous avez construit la liste opt... les conditions peuvent être utilisées pour "trier" et sauter ce qu'on ne veut pas retenir plutôt que de gérer ça comme une exception (comme vérifier la longueur de la liste).

    Pour ce qui est de la gestion des exceptions, ouvrir un tuto. pour (re)voir comment ça s'utilise est un préalable (plutôt que de poser des questions montrant que vous ne semblez même pas avoir fait cet effort)

    A la base, çà aide sélectionne des lignes dans un tableau pandas.
    Chance, ces lignes ont un index qui permet de repérer chaque ligne.
    En ne faisant rien de cette information vous vous compliquez la vie pour rien.

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

  19. #19
    Membre confirmé
    Homme Profil pro
    support technique
    Inscrit en
    Mars 2020
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : support technique

    Informations forums :
    Inscription : Mars 2020
    Messages : 79
    Par défaut
    Re,
    c'est vrai que les exceptions, j'ai tendance à faire on error resume next (je sais c'est pas du python, mais c'est une des rares exceptions dont je me souviens du langage basic.

    tant qu'à trier en amont c'est clair que je n'y avais pas pensé et qu'en plus c'est super logique.

    Merci

  20. #20
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 790
    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 790
    Par défaut
    Citation Envoyé par figuedi Voir le message
    c'est vrai que les exceptions, j'ai tendance à faire "on error resume next" (je sais c'est pas du python, mais c'est une des rares exceptions dont je me souviens du langage basic.
    Une exception, c'est quelque chose qui sort du cours normal des opérations (qu'on ne sait pas traiter). Autrement dit, si on peut la supprimer avec un filtre (des conditions), ce n'est pas une exception mais un style de programmation.

    Citation Envoyé par figuedi Voir le message
    tant qu'à trier en amont c'est clair que je n'y avais pas pensé et qu'en plus c'est super logique.
    Si je lis:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
            mod = i % 4
            if mod == 0:
                col = 1
                lig = lig + 1
            if mod == 1:
                col = 2
            if mod == 2:
                col = 3
            if mod == 3:
                col = 4
    on voit que votre code tient debout avec des bouts de ficelles... et que la logique devrait suggérer que si mod se dérive du reste d'une division par 4, lig pourrait en être le quotient... Justement, avec Python, divmod retourne quotient et reste.

    De plus mod et col ne semblent utilisés que pour passer row et column à grid.
    Par curiosité, avez vous testé ce que fait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    import tkinter as tk
    n = 2
    for i in range(10):
         r, c = divmod(i, 4)
         tk.Label(text=f'{r}x{c}').grid(row=r+n, column=c+n)
    tk.mainloop()
    et réfléchit pourquoi ce qui s'affiche ne change pas lorsqu'on change la valeur de n (>= 0)?

    Vous voulez faire vite avec ce que vous savez plutôt que de vous approprier les outils que vous devez utiliser... à la fin, ce sera un tas de boue que même pas vous saurez lire (car pas grand chose y est "logique").

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

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

Discussions similaires

  1. Macro qui ne fonctionnent plus après mise à jour
    Par Apranax dans le forum VBA Outlook
    Réponses: 7
    Dernier message: 09/09/2020, 17h46
  2. Compilation qui ne fonctionne plus après copie
    Par felix104116 dans le forum C++
    Réponses: 3
    Dernier message: 16/12/2017, 02h43
  3. une methode qui se lance sans que je le veuille
    Par rafoim dans le forum Général Python
    Réponses: 3
    Dernier message: 31/03/2013, 13h37
  4. Réponses: 15
    Dernier message: 08/12/2011, 12h39
  5. function qui ne fonctionne plus après fractionnement Base
    Par Daniel MOREAU dans le forum Access
    Réponses: 1
    Dernier message: 25/05/2006, 21h37

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