Probleme d'argument fonction

Pr.Witherfire -  
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   -

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

A voir également:

7 réponses

Phil_1857 Messages postés 1872 Date d'inscription   Statut Membre Dernière intervention   168
 

Bonjour,

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

1
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 

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 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 

bonjour,

globals()["Button"+str(x)]=tkinter.Button(F, command=lambda y=x :Fonction(y))
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 
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   Statut Membre Dernière intervention   168
 

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 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 

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
goupil
 

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 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 

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   Statut Membre Dernière intervention   168
 

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
goupil
 

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   Statut Membre Dernière intervention   168 > goupil
 

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

0
goupil > Phil_1857 Messages postés 1872 Date d'inscription   Statut Membre Dernière intervention  
 

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

0
Pr.Witherfire
 

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

0