Lancer un script python en appuyant sur un bouton Tkinter
Fermémamiemando Messages postés 33459 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 8 janvier 2025 - 11 oct. 2022 à 15:37
- Tkinter execute python script
- Script vidéo youtube - Guide
- Citizen code python avis - Accueil - Outils
- Ghost script - Télécharger - Polices de caractères
- Microsoft activation script - Accueil - Windows
- Script bat - Guide
3 réponses
7 sept. 2022 à 21:35
bonjour,
le code que tu présentes, c'est celui de fiher.py?
Modifié le 8 sept. 2022 à 17:47
Bonjour,
Pour compléter la réponse d'yg_be, les boutons dans Tkinter ont un paramètre command qui permet d'appeler une fonction passée en paramètre (callback).
Exécuter un autre script python
Si on suit l'idée proposée par ug_be Il suffit que la callback lance cet autre programme python (par exemple à l'aide de subprocess.call).
my_script.py
#!/usr/bin/env python3 # -*- coding: utf-8 -*- print("coucou")
Le fichier doit avoir des droits en exécution. Sous Linux :
chmod a+x my_script.py
gui.py
#!/usr/bin/env python3 # -*- coding: utf-8 -*- import subprocess from tkinter import * def my_callback(): subprocess.call("./my_script.py", shell=True) window = Tk() button = Button(window, text="start", command=my_callback) button.pack() window.mainloop()
Ce fichier doit être dans le même dossier que my_script.py.
Exécuter une fonction codée dans un autre module python
C'est une solution plus élégante que la précédente. En effet, on préfère généralement qu'une fonctionnalité soit enveloppée dans une fonction, ce qui en facilite l'appel et la rend plus facile à réutiliser. On pourrait donc modifier l'exemple précédent ainsi :
my_lib.py
#!/usr/bin/env python3 # -*- coding: utf-8 -*- def my_function(): print("coucou")
gui.py
#!/usr/bin/env python3 # -*- coding: utf-8 -*- from my_lib import my_function from tkinter import * window = Tk() button = Button(window, text="start", command=my_function) button.pack() window.mainloop()
Ce fichier doit être dans le même dossier que my_lib.py.
Bonne chance
Modifié le 11 oct. 2022 à 15:38
mamiemando bonjour,
Juste une précision: si , dans le première version, ./my_script.py doit avoir des arguments : comment les ajoute-t'on ? Le mieux serait en plus d'avoir des camps à remplir qui s'ajoutent automatiquement... Mais je vais avancer par étape..
11 oct. 2022 à 05:53
Ca y est j'ai compris: entre crochets, entre guillemets, et virgule entre chaque argument....
Modifié le 11 oct. 2022 à 15:57
Bonjour,
Par rapport aux messages #5 et #6 : qui dit nouvelle question dit nouveau fil de discussion pour garder le forum propre.
Récupérer arguments passés en paramètres en script
Les arguments passé en paramètre au script sont mémorisés dans la liste sys.argv ; tu peux donc itérer dessus ou utiliser l'opérateur [] pour accéder à un argument particulier.
Exemple :
#!/usr/bin/env python3 # -*- coding: utf-8 -*- import sys def main(): for (i, arg) in enumerate(sys.argv): print(f"Argument {i}: '{arg}'") print(sys.argv[0]) if __name__ == "__main__": main()
Résultat :
python3 toto.py arg1 "arg ument 2" arg3
Argument 0: 'toto.py'
Argument 1: 'arg1'
Argument 2: 'arg ument 2'
Argument 3: 'arg3'
toto.py
Demander les arguments à l'exécution
Si tu veux demander des valeurs à l'exécution, encore faut-il savoir combien tu veux en demander. Il faut demander cette valeur à l'utilisateur, mais comme on n'est pas sûr qu'il va saisir un entier positif, il faut contrôler que la chaîne de caractère qu'il a saisi est conforme. Ensuite tu peux demander les arguments en fonction de cet entier.
C'est ce que fait le code ci-dessous. Seul le nombre d'argument est contrôlé, car on n'a pas d'hypothèse à vérifier concernant le type des arguments saisis par la suite. On se contente de mémoriser la chaîne de caractère saisie.
#!/usr/bin/env python3 # -*- coding: utf-8 -*- import sys def input_int(label:str = "", test = None) -> int: while True: s = input(label) try: n = int(s) if test and test(n): return n else: print(f"Saisie invalide ({s})", file=sys.stderr) except ValueError as e: print(f"Saisie invalide ({s}): {e}", file=sys.stderr) pass def main(): num_args = input_int("Nombre d'arguments ? ", lambda x: x > 0) args = [ input(f"Argument {i + 1} ? ") for i in range(num_args) ] print(args) if __name__ == "__main__": main()
Résultat :
python3 toto.py
Nombre d'arguments ? abc
Saisie invalide (abc): invalid literal for int() with base 10: 'abc'
Nombre d'arguments ? -2
Saisie invalide (-2)
Nombre d'arguments ? 3
Argument 1 ? arg1
Argument 2 ? arg ument 2
Argument 3 ? arg3
['arg1', 'arg ument 2', 'arg3']
Bonne chance
7 sept. 2022 à 21:41
Non , ce code est celui de mon interface graphique.
7 sept. 2022 à 22:31
Ceci t'aidera sans doute: https://www.delftstack.com/fr/howto/python/python-run-another-python-script/