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 :

Variable adaptative indentation


Sujet :

Python

  1. #1
    Membre habitu�
    Homme Profil pro
    �tudiant
    Inscrit en
    Septembre 2022
    Messages
    9
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 22
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Septembre 2022
    Messages : 9
    Par d�faut Variable adaptative indentation
    Bonjour � tous,

    Je me tourne vers vous car j'ai une requ�te un petit peu complexe et je ne suis pas s�r que cela soit possible en Python.

    Pour faire simple, je suis en train de cr�er une application qui va cr�er plusieurs boutons en tkinter � l'aide d'un while et je voudrais donc que le while puisse cr�er plusieurs variables avec diff�rents noms (le nombre de bouton est variable d'o� le besoin d'utiliser un while)

    Voici un extrait de 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
    i = 1
    day = 1
    num_row = 0
    num_column = 0
    while i <= month[nb_month][0]:
        date1 = Button(root, text = day, font='Arial 25', bg = "white")
        date1.grid(row = num_row, column = num_column)
    
        if num_column == 9:
            num_column = 0
            num_row += 1
    
        i += 1
    Ce que je voudrais donc faire est que mon code modifie automatiquement le nom de la variable mis en gras � chaque indentation (par exemple : date1, date2, date3, ...)

    J'esp�re avoir �t� clair je peux essayer de donner plus de d�tails si ma demande n'est pas assez pr�cise.

    Merci d'avance
    Bonne soir�e

  2. #2
    Expert confirm�
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 094
    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 : 4 094
    Par d�faut
    Bonjour,

    Ce n'est clairement pas une bonne pratique ! On ne g�n�re pas dynamiquement des variables avec des noms distincts

    Une des solutions les plus simples pour nommer ses boutons est d'utiliser les dictionnaires.

  3. #3
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    F�vrier 2006
    Messages
    12 848
    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 848
    Billets dans le blog
    1
    Par d�faut
    Bonjour
    Citation Envoy� par ImValll Voir le message
    J'esp�re avoir �t� clair je peux essayer de donner plus de d�tails si ma demande n'est pas assez pr�cise.
    Tr�s clair, demande parfaitement pr�cise, mais totalement inutile.
    En programmation, quand on veut stocker n �l�ments identiques, on utilise un tableau. Tu veux stocker 5 prix: un tableau de prix. Tu veux stocker 160 fruits: un tableau de fruits. Et tu veux stocker month[nb_month][0] boutons: un tableau de boutons.
    En plus c'est tout b�nef. Au lieu de devoir ensuite traiter "bouton1" puis 3 lignes plus bas traiter "bouton2" de la m�me fa�on (code dupliqu�), tu �cris une boucle for b in boutons et tu traites simplement "b" (code de traitement �crit une fois).
    Un exemple: g�n�rer et afficher 5 prix entre 10 et 100�

    Ta solution
    Code python : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    # Remplissage
    prix1=random.randint(10, 100)
    prix2=random.randint(10, 100)
    prix3=random.randint(10, 100)
    prix4=random.randint(10, 100)
    prix5=random.randint(10, 100)
     
    # Affichage
    print(prix1)
    print(prix2)
    print(prix3)
    print(prix4)
    print(prix5)
    Et le jour o� tu passes � 500 (remarque tu dois avoir conscience du probl�me puisque c'est justement le but de ta question "comment automatiser cet indice prixN")

    Donc pour �a, la solution habituelle: passer r�ellement par un truc offrant d�j� une notion d'indice
    Code python : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # Remplissage
    prix=list()
    for i in range(5):
    	prix.append(random.randint(10, 100))
     
    # Eventuellement un programmeur Python habitué mettra à la place une liste en intension...
    prix=[random.randint(10, 100) for i in range(5)]
     
    # Affichage
    for p in prix:
    	print(p)
    Et si je veux passer � 500 no soucy!!!

    Les langages de programmation (dont Python) t'offrent des outils tout fait pour ces probl�mes d�j� connus ; plut�t que de chercher � r�inventer l'eau ti�de au travers de solutions toutes plus bancales les unes que les autres, apprends � les utiliser...

    Citation Envoy� par ImValll Voir le message
    while i <= month[nb_month][0]
    for i in range(month[nb_month][0])
    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]

  4. #4
    Membre habitu�
    Homme Profil pro
    �tudiant
    Inscrit en
    Septembre 2022
    Messages
    9
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 22
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Septembre 2022
    Messages : 9
    Par d�faut
    Rebonsoir,

    Merci pour vos retours, vos propositions de solutions sont int�ressantes et j'y avait d�j� pens� avant cependant avec celle-ci je n'ai pas l'impression que je pourrai ensuite r�utiliser mes boutons.

    Mon application est constitu�e de plusieurs "pages" avec dans chacune d'entre elles des boutons avec des fonctions qui leur sont attribu�es bien distinctes.
    A chaque fois que l'utilisateur d�cide de passer d'une page � une autre mon programme va modifier ou supprimer chaque boutons (je n'ai pas encore d�cid� quelle m�thode serai la plus optimis� dans mon cas) afin de les remplacer par des autres avec des autres fonctions.

    C'est pourquoi je m'�tais tourn� vers une id�e de 1 bouton = 1 variable pour pouvoir tous les diff�rencier mais je n'avais pas envie de devoir tous taper � la main d'o� mon id�e d'automatisation.

    Mais je ne dit pas que vos solutions n'iraient pas mais s'il y a un moyen de les diff�rencier pour les r�utiliser facilement ensuite au cas par cas je n'ai pas compris comment faire.

    Je ne pense pas que ce que j'ai en t�te soit r�alisable mais j'attend quand m�me vos r�ponses au cas o�.

    Bonne soir�e

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    F�vrier 2006
    Messages
    12 848
    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 848
    Billets dans le blog
    1
    Par d�faut
    Citation Envoy� par ImValll Voir le message
    C'est pourquoi je m'�tais tourn� vers une id�e de 1 bouton = 1 variable pour pouvoir tous les diff�rencier mais je n'avais pas envie de devoir tous taper � la main d'o� mon id�e d'automatisation.
    Le "un truc=une variable" marche parfaitement avec les tableaux (et j'ai �crit volontairement "truc" pour �tre le plus g�n�raliste possible donc �a peut parfaitement s'appliquer aux boutons).
    Dans mon exemple sur les al�as, "prix[1]" est une variable bien pr�cise et totalement diff�rente de "prix[4]". Dit autrement, il n'y a aucune diff�rence fondamentale entre des variables "prix_1", "prix_2", "prix_3" ou des variables "prix[1]", "prix[2]", "prix[3]". Mais la seconde �criture est bien plus souple car elle permet la programmation g�n�raliste "j'applique un traitement sur prix[i] avec i variant de 0 � n".

    Regarde cet exemple issu du programme Filezilla. Il affiche, pour chaque fichier � transf�rer, des �l�ments graphiques comme des cases � cocher ou des barres de progression. Le codeur n'a certainement pas utilis� des notations comme "case_a_cocher_1", "case_a_cocher_2", "case_a_cocher_3" mais est obligatoirement pass� par un tableau de cases. Et pareil pour les barres(*). Et je dis "obligatoirement" en pesant bien mes mots. Il ne peut pas �tre pass� par ta fa�on de faire.
    Nom : Filezilla-1.jpg
Affichages : 115
Taille : 225,8 Ko
    *En fait, si j'avais d� coder ce truc, au lieu de manipuler un "tableau de cases" d'un c�t� et un "tableau de barres" de l'autre, j'aurais cr�� un objet "fichier", objet contenant les �l�ments sur le fichier ainsi que les �l�ments graphiques associ�s comme la case � cocher et la barre de progression. Et ensuite j'aurais simplement trait� un "tableau de fichiers" (principes de la POO).

    Apr�s il y a cette histoire de boutons qui disparaissent d'une page � l'autre que j'arrive pas trop � imaginer. Soit ce sont deux pages d�di�es � afficher deux infos similaires et l� encore on peut dire "je n'utilise qu'une page et je lui fait afficher l'info 1 ou l'info 2 selon le cas" ; soit ce sont deux pages d�di�es � afficher deux infos diff�rentes et dans ce cas tu �cris le code de chaque page dans des modules (objets, fonctions, etc) bien pr�cis.
    Mais si c'est du style "j'efface le bouton modifier quand il n'y a pas de choses � modifier" alors l� tu vas droit dans le mur. C'est en effet ultra d�routant pour un utilisateur de voir des �l�ments graphiques disparaitre et r�apparaitre. Il pensera imm�diatement � un bug. Il vaut mieux, si tu veux d�sactiver un �l�ment grphique selon certains cas, le d�sactiver donc et le laisser pr�sent mais en gris�.
    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 confirm�
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 094
    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 : 4 094
    Par d�faut
    Mais je ne dit pas que vos solutions n'iraient pas mais s'il y a un moyen de les diff�rencier pour les r�utiliser facilement ensuite au cas par cas je n'ai pas compris comment faire.
    Voici un exemple avec les dictionnaires.

    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
    import tkinter as tk
     
    root = tk.Tk()
     
     
    buttons = {}
    for i in range(5):
        name: str = f"day_{i}"
        button = tk.Button(root, text=i, font="Arial 25", bg="white")
        buttons[name] = button
     
     
    buttons["day_2"].pack()
    buttons["day_4"].pack()
     
     
    root.mainloop()

  7. #7
    Expert confirm� Avatar de papajoker
    Homme Profil pro
    D�veloppeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 324
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ni�vre (Bourgogne)

    Informations professionnelles :
    Activit� : D�veloppeur Web
    Secteur : High Tech - Multim�dia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 324
    Par d�faut
    bonjour
    Citation Envoy� par ImValll Voir le message
    vos propositions de solutions sont int�ressantes et j'y avait d�j� pens� avant cependant avec celle-ci je n'ai pas l'impression que je pourrai ensuite r�utiliser mes boutons.
    Ton code n'est pas assez clair !!! dans ta boucke, day et i ne varient pas (sont-ils diff�rents ?)
    Et pour "r�utiliser", il faut un "index" que tu ne donnes justement pas ici.

    Exemple, Si tu as une page par mois et des jours avec un bouton :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
     
    boutons est un dico de dico , pas liste car elle débute à 0 et pas génial pour des jours
    boutons[1][5] = tk.Button(...)    # 5 janvier
    boutons[2][15] = tk.Button(...)  # 15 février
    ...
    boutons[ce_mois][jour_actuel].config(state="disabled")
    Pour moi, il n'y a rien de plus simple

Discussions similaires

  1. Adapter le nombre de variables en fonction du nombre d'inputs
    Par michel42 dans le forum G�n�ral Python
    R�ponses: 8
    Dernier message: 06/04/2012, 08h50
  2. R�ponses: 0
    Dernier message: 25/01/2011, 12h34
  3. Titre s'adaptant � la variable choisie
    Par raph1091 dans le forum Webi
    R�ponses: 8
    Dernier message: 09/11/2010, 17h34
  4. Adaptation de Code (Constante => Variable)
    Par Kimaos dans le forum Macros et VBA Excel
    R�ponses: 5
    Dernier message: 06/04/2010, 10h27
  5. Comment indenter une variable dans un "onclick" ?
    Par shadow54 dans le forum jQuery
    R�ponses: 2
    Dernier message: 10/02/2010, 20h03

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