alors bonjour tout le monde. J'ai ce problème avec une interface graphique que je fais avec tkinter (module Python). C'est donc, j'identifie une commande au bouton, qui est une fonction contenant les éléments que le programme doit faire après avoir cliqué sur ce bouton et que la commande est simplement compromise, lorsque vous appuyez sur la touche, modifiez une variable. Eh bien, cela s'est bien passé, mais lorsque j'ai essayé de concaténer cette valeur à une chaîne pour être dûment écrite dans un fichier, il ne fonctionne tout simplement pas. Voici le code.
import os from tkinter import * root = Tk() gui = "" _path = "" def ButtonA_command(): gui = " -w" print(gui) def ButtonB_command(): gui = " " print(gui) def ButtonC_command(): bat_file = open("fatty.bat", "w") bat_file.write("pyinstaller --onefile" + gui + " " + EntryA.get()) bat_file.close() ButtonA = Button(root, text= "GUI", command= ButtonA_command) ButtonB = Button(root, text= "CMD e GUI", command= ButtonB_command) ButtonC = Button(root, text= "Criar", command= ButtonC_command) EntryA = Entry(root) ButtonA.pack() ButtonB.pack() EntryA.pack() ButtonC.pack() root.mainloop()
3 Réponses :
Vous devez définir vos fonctions comme suit. Sinon, vous créez une variable locale GUI code> à l'intérieur de la portée de la fonction:
Je vois ce qui se passe ici. Lorsque vous exécutez BoutonA_Command () une nouvelle variable appelée GUI apparaît (vous avez donc deux variables appelées Gui - une dans votre fonction et une en dehors de celle-ci). Utilisez GLOBAL GUI CODE> comme première ligne de chaque fonction et il devrait fonctionner (fonctionne sur mon PC).
EDIT: L'autre commentateur était un peu plus rapide :) p>
Vous devez écrire: à l'intérieur de toute fonction sinon, il le traitera comme une nouvelle variable locale de cette fonction. p> p>
Qu'est-ce qui ne fonctionne pas exactement? Concaténation ou fichier d'écriture?
Je ne sais pas ce qui ne fonctionne pas. Tout ce que je sais, c'est que lorsque je vais voir le fichier que je voulais créer, la valeur variable n'est tout simplement pas là-bas
Cela semble travailler pour moi. Il écrit la valeur (Entrya.get (Get ()) concaténée
Est-ce que le programme semble fonctionner bien, mais vous ne pouvez pas trouver le fichier plus tard? Cela pourrait être votre répertoire de travail actuel.
Je pense que j'ai trouvé quel est le problème! Vous cliquez pour la première fois sur le bouton puis sur la touche, puis des boutons droit?
Non, je clique sur le bouton puis sur le bouton qui est
Exécutez-vous le programme de la ligne de commande? Sinon, essayez ça. Il peut afficher des erreurs que vous ne voyez pas? En outre, vous pouvez
Importer tkinter.Messagebox
Importer OS code>, puis
tkinter.messagebox.showinfo (titre = aucun, message = os.gecwd ()) code> pour voir où votre fichier est écrit.
@TDelaney Je peux trouver le fichier facilement et le lire, mais il ne dépasse tout simplement pas la variable "GUI" au fichier.
Il suffit de faire une correction dans
buttonb_command () code>, au lieu de
gui = "" code>, écrivez
GUI + = "" code>
Boutona_Command CODE> et
BOUTONB_COMMAND CODE> doit-il tous les deux commencer par
Global GUI CODE> afin qu'ils écrivent la variable du module-global, et non une variable locale appelée
GUI < / code> qui est ensuite mis au rebut à la sortie.
@Tdelaney n'a pas travaillé pour le gérer de cmd
@Yash - cela ne fonctionne pas car
GUI code> en tant que variable locale n'est pas initialisé à rien. C'est l'un de ces cas où vous avez besoin
global code>
@Clashlarincogamer - J'essayais de déterminer ce que "ne fonctionne tout simplement pas" signifie. Puisque nous savons maintenant que le problème est que le GLOBAL
GUI CODE> n'est pas mis à jour, la solution est la déclaration
Global GUI CODE> dans les méthodes qui le mettent à jour.