Probleme d'argument fonction

Fermé
Pr.Witherfire - 27 janv. 2023 à 17:44
yg_be Messages postés 22793 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 mai 2024 - 28 janv. 2023 à 16:21

Bonjour. Voila, je voudrais, dans une boucle, crre un bouton avec un fonction et un argument

from tkinter import *

F = Tk()

def Fonction(num):

    print(num)



x=0
y=5
while x != y:

    globals()["Button"+str(x)]=Button(F, command=lambda:Fonction(x))
    globals()["Button" + str(x)].pack()
    x = x+1

F.mainloop()

Logique, les boutons affichent tous 5. Pouvez vous m'aider au revoir bonne soirée merci

7 réponses

Phil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 168
27 janv. 2023 à 20:30

Bonjour,

Pas terrible l'utilisation de global de cette façon ...

1
yg_be Messages postés 22793 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 mai 2024 1 467
28 janv. 2023 à 09:25

C'est certainement non conformiste.  Dans le cadre d'un prototype personnel, je pense que cela peut fonctionner sans souci.

0
yg_be Messages postés 22793 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 mai 2024 1 467
27 janv. 2023 à 18:28

bonjour,

globals()["Button"+str(x)]=tkinter.Button(F, command=lambda y=x :Fonction(y))
0
yg_be Messages postés 22793 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 mai 2024 1 467
28 janv. 2023 à 10:15
import tkinter
F = tkinter.Tk()

def Fonction(num):

    print(num)

MyButtons={}
x=0
y=5
while x != y:
    MyButtons[x]=tkinter.Button(F, command=lambda y=x :Fonction(y))
    MyButtons[x].pack()
    x = x+1
F.mainloop()
0
Phil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 168
Modifié le 28 janv. 2023 à 10:53

Bonjour,

D'autant que les widgets créés dans le programme principal sont visibles dans les fonctions eventuelles,

donc pas besoin de les globaliser ...

def show_entry():

    txt = e1.get()
    ...................




................
e1 = Entry(f1, show = '*', width = 10)
e1.place(x = 110,y = 10)
e1.focus()
.................
0
yg_be Messages postés 22793 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 mai 2024 1 467
28 janv. 2023 à 15:28

La variable e1 dans ton exemple est globale, en effet.

L'utilisation de globals() permet de créer une variable globale avec un nom dynamique:

x=1
globals()["e"+str(x)]=123
print(globals()["e"+str(x)])
-1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question

Salut.

Pr.Witherfire, as-tu pour ambition d'être une référence pour tout ce qu'il ne faut pas faire ? Tu tentes d'établir un record du code le plus crade ?

- import * ✓

 - Obstination à vouloir utiliser des variables dynamiques. ✓

- Se servir d'une boucle while au lieu d'un simple for, de plus avec une condition de différence ✓

- Sauts de lignes inutiles nuisant à la lecture du code ✓

- Espaces manquants nuisant à la lecture du code ✓

- Identifiants non conformes et non représentatifs ✓

En 11 lignes de code, c'est pas mal, je pense tout de même que tu peux faire mieux (enfin pire pour nous).

Il existe des outils, lesquels sont utilisables en lignes de commandes dans ta console dos, et même utilisables dans les commandes d'exécutions de ton EDI,  comme :

  
- black pour améliorer la mise en forme du code.

https://pypi.org/project/black/

- pyflakes (ou encore pep8) : analyseur des erreurs de code (bien moins strict que pylint)

https://pypi.org/project/pyflakes/

- pylint : même dessein que pyflakes, mais très très strict, cela peut être une assistance à améliorer sa façon de coder, il peut être configuré à souhaits.

https://pypi.org/project/pylint/

- vulture : pour la détection de code (variables, attributs, fonctions, etc) déclarés mais inusités, très pratique pour nettoyer du code.

https://pypi.org/project/vulture/
 
  
Ces outils indispensables doivent être dans la panoplie de tout bon codeur python.

0
yg_be Messages postés 22793 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 mai 2024 1 467
28 janv. 2023 à 16:21

Je suis impressionné par tant d'intégrisme et d'intolérence!  Un peu de non conformisme, cela n'a rien de crade.

0
Phil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 168
Modifié le 28 janv. 2023 à 13:41

Bonjour Goupil,

Peut-être le sais-tu déjà, mais bon ... :-)

on peut insérer des liens directement cliquables avec l'une des icones présentes au dessus de la fenêtre de réponse:

https://pypi.org/project/black/

0

Salut Phil,

bah non, il n'y a pas pour les visiteurs une façon d'insérer des liens dans les messages, il y a les boutons Bold, Italic, Underline, les 2 types de listes, les boutons d'insertions (image externe et code), et c'est tout  =)

Après ça peut rester compréhensible qu'un visiteur ne puisse insérer des liens afin d'éviter le spam et la pub, mais il pourrait quand même y avoir des domaines « sûrs » qui seraient établis dans une liste blanche. Ça serait obligatoirement beaucoup plus de choses à gérér de la part des modos, contributeurs du forum. Rien n'est aisé dès l'instant où des « anonymes » peuvent écrire dans un forum.

Ce qui me gonfle le plus ici, ce sont les sauts de lignes qui ne sont pas respectés dans mes messages et cet insupportable système d'insertion de code, l'ancien était très bien.

0
Phil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 168 > goupil
28 janv. 2023 à 15:35

ah ok, tu ne vois donc pas ceci si je comprends bien:

0
goupil > Phil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024
28 janv. 2023 à 15:50

Non, on n'a pas ces 2 boutons ^^

0
Pr.Witherfire
28 janv. 2023 à 14:13

Ok merci à tous pour votre aide. Je jette un coup d'oeil sur les liens merci.

0