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 :

Problème avec mes checkbox [Python 3.X]


Sujet :

Python

  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2015
    Messages : 79
    Par défaut Problème avec mes checkbox
    Bonjour,
    Je vous explique mon problème. Je veux créer un outil qui affiche le contenu des images d'un fichier. L'utilisateur pourra alors sélectionner les images qu'il désire à l'aide de checkbox. Malheuresement, quand je clique sur une checkbox, toutes les checkbox se valident. Et vice versa.
    JE vous transmet mon code.
    Attention toutefois, il faudra légèrement modifier celui ci pour que vous lui indiquer en dur le nom de votre dossier image et de votre dossier de sauvegarde qui doit avoir l'arborescence suivante :

    - Images
    -Folder_Path
    - img1
    - img2
    - img3
    - img4
    -directorysave
    - photo
    - picto

    Voici donc mon 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
    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
    from tkinter import *
    from PIL import Image, ImageTk
    import os
    import shutil
    from functools import partial
    folder_path = '/home/admin01/Images/test/'
    directorysave= '/home/admin/Images/analyse'
    x=0
    y=0
    imagelist=[] #tenter de créer une classe pour rendre ca plus propre
    root = Tk()
    vsb = Scrollbar(root, orient=VERTICAL)
    vsb.grid(row=0, column=1, sticky=N+S)
    hsb = Scrollbar(root, orient=HORIZONTAL)
    hsb.grid(row=1, column=0, sticky=E+W)
    c = Canvas(root,yscrollcommand=vsb.set, xscrollcommand=hsb.set)
    c.grid(row=0, column=0, sticky="news")
    vsb.config(command=c.yview)
    hsb.config(command=c.xview)
    root.grid_rowconfigure(0, weight=1)
    root.grid_columnconfigure(0, weight=1)
    fr = Frame(c)
     
    check = IntVar()
     
    def Trier():
    	print(check.get())
    	if(check.get() == 1):
    		print("check.get() = ", check.get())
    		#print(imagelist)
    		shutil.copy2(folder_path + file, directorysave+ "/photo/" + file)
    		print("copiée")
    	else:
    		print("pas copiée car check.get() = ", check.get())
     
     
     
     
    #On ajoute des widgets :
    for path, dirs, files in os.walk(folder_path):
    	resolution = (300,500)
    	for file in files:
    		canvas = Canvas(fr)
    		canvas.grid(row = x, column = y, sticky = N)
    		print(check.get())
    		image1 = Image.open(folder_path + file)
    		image1.thumbnail(resolution,Image.BILINEAR)
    		photo = ImageTk.PhotoImage(image1)
    		imagelist.append(photo)
    		Checkbutton(fr,variable=check,command = partial(Trier,file)).grid(row = x, column = y, sticky = S)
    		canvas.create_image(128,128, image=photo)
    		if(y<3):
    			y = y+1
    		else:
    			x = x+1
    			y = 0
    		print(file + " " + str(x) + " " +str(y))
    if(y<3):
    	bouton=Button(fr, text="Terminer",anchor = SE, command= root.destroy)
    	bouton.grid(row = x, column = y+1)
    else: 
    	bouton=Button(fr, text="Terminer",anchor = SE, command= root.destroy)
    	bouton.grid(row = x+1, column = 0)
    c.create_window(0, 0,  window=fr)
    fr.update_idletasks()
    c.config(scrollregion=c.bbox("all"))
    root.mainloop()
    Merci par avance d'avoir pris le temps de répondre à ma question malgré la création de fichiers nécessaires.
    Cordialement,
    Florian

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

    Prenez le temps d'écrire un exemple avec 2 checkbox qui partagent la même variable (votre variable=check) et un autre dans lequel chacune à la sienne..

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

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2015
    Messages : 79
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,

    Prenez le temps d'écrire un exemple avec 2 checkbox qui partagent la même variable (votre variable=check) et un autre dans lequel chacune à la sienne..

    - W
    Bonjour Wiztricks,
    J'ai bien suivi tes conseils et j'ai créer le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    >>> tk = tkinter.Tk()
    >>> var1 = IntVar()
    >>> var2 = IntVar()
    >>> var1 = Checkbutton(tk,variable=var1,text = "var1")
    >>> var1.pack()
    >>> var2 = Checkbutton(tk,variable=var2,text = "var2")
    >>> var2.pack()
    >>> tk = tkinter.Tk()
    >>> var1 = Checkbutton(tk,variable=var1,text = "var1")
    >>> var1.pack()
    >>> var2 = Checkbutton(tk,variable=var1,text = "var2")
    >>> var2.pack()
    >>>
    Mais je ne vois pas ou tu veux en venir. Quand j'ai lu ton message je me suis dis " Tiens si elles s'activent toute en même temps c'est parce qu'elle ont la même variable. Quand tu clique sur une checkbox la variable passe à 1 et ca pour toutes les checks boxs."
    J'ai tout de même réaliser ce code et finalement, peut importe si la variable est la même ou est différente, les checkboxs se valident bien indépendamment.
    Donc ducoup je ne comprends pas cette histoire de variable.

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 714
    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 714
    Par défaut
    Citation Envoyé par flobos Voir le message
    Quand j'ai lu ton message je me suis dis " Tiens si elles s'activent toute en même temps c'est parce qu'elle ont la même variable. Quand tu clique sur une checkbox la variable passe à 1 et ca pour toutes les checks boxs."
    J'ai tout de même réaliser ce code et finalement, peut importe si la variable est la même ou est différente, les checkboxs se valident bien indépendamment.
    Si j’exécute le code que vous avez essayé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >>> tk = tkinter.Tk()
    >>> var1 = IntVar()
    >>> var2 = IntVar()
    >>> var1 = Checkbutton(tk,variable=var1,text = "var1")
    >>> var1.pack()
    >>> var2 = Checkbutton(tk,variable=var2,text = "var2")
    >>> var2.pack()
    on peut valider les checkbox indépendamment.
    Vu que vous écrasez vos variables, difficile de les voir passer à quoi que ce soit: elles ne sont plus.

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

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2015
    Messages : 79
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    on peut valider les checkbox indépendamment.
    Vu que vous écrasez vos variables, difficile de les voir passer à quoi que ce soit: elles ne sont plus.
    - W
    Je ne pense pas avoir compris. Comment je peux écraser ma variable alors que les deux checkbox sont indépendantes ?

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 714
    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 714
    Par défaut
    Citation Envoyé par flobos Voir le message
    Je ne pense pas avoir compris. Comment je peux écraser ma variable alors que les deux checkbox sont indépendantes ?
    En écrivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    >>> var1 = Checkbutton(tk, variable=var1, text = "var1")
    var1 n'est plus l'IntVar, pire comme il est déréférencé, il n'existe plus.
    Dans tous les cas, impossible de faire un var1.get() pour voir si la variable est à 0 ou 1.

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

  7. #7
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2015
    Messages : 79
    Par défaut
    var1 n'est plus l'IntVar, pire comme il est déréférencé, il n'existe plus.
    Dans tous les cas, impossible de faire un var1.get() pour voir si la variable est à 0 ou 1.

    - W

    Ah oui effectivement, ainsi mon intuition était bonne. Quand les checkboxs dépendent de leur variable. Mais alors comment dans mon code je peut rendre mes checkboxs indépendantes alors qu'elles sont generés dans un for ?

  8. #8
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 714
    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 714
    Par défaut
    Citation Envoyé par flobos Voir le message
    Ah oui effectivement, ainsi mon intuition était bonne. Quand les checkboxs dépendent de leur variable. Mais alors comment dans mon code je peut rendre mes checkboxs indépendantes alors qu'elles sont generés dans un for ?
    En créant la variable en même temps que le checkbutton associé et en les stockant dans une liste pour éviter qu'elles soient déréférencées, en utilisant la variable associée au checkbutton (créée par Tk si vous ne lui demandez rien) - mais c'est plus compliqué.
    note: vous pourriez aussi afficher l'image via l'option image du checkbutton et virer le canvas.

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

  9. #9
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2015
    Messages : 79
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    En créant la variable en même temps que le checkbutton associé et en les stockant dans une liste pour éviter qu'elles soient déréférencées, en utilisant la variable associée au checkbutton (créée par Tk si vous ne lui demandez rien) - mais c'est plus compliqué.
    note: vous pourriez aussi afficher l'image via l'option image du checkbutton et virer le canvas.

    - W
    Un grand merci Wiztricks.
    J'ai suivi ton conseil, j'ai déclaré localement ma variable check dans ma boucle for et j'ai ajouté chaque variable check a une liste. Tout fonctionne dorénavant.
    Un grand merci à toi et à ta pedagogie =)

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

Discussions similaires

  1. problème avec mes constantes
    Par salseropom dans le forum C
    Réponses: 6
    Dernier message: 10/05/2006, 17h37
  2. probléme avec une checkbox
    Par ardamus dans le forum Langage
    Réponses: 4
    Dernier message: 02/03/2006, 19h58
  3. [JDBC]problème avec mes id
    Par Hydre dans le forum JDBC
    Réponses: 12
    Dernier message: 29/09/2005, 13h19
  4. [std::list][find_if] problème avec mes foncteurs
    Par n!co dans le forum SL & STL
    Réponses: 12
    Dernier message: 04/02/2005, 11h56
  5. Problème avec mes tables de relation...
    Par mmike dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 02/06/2003, 15h16

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