0
votes

Variable en python ne pas être écrit dans le fichier après avoir été défini par un bouton Tkinter

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()


13 commentaires

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 , puis tkinter.messagebox.showinfo (titre = aucun, message = os.gecwd ()) 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 () , au lieu de gui = "" , écrivez GUI + = ""


Boutona_Command et BOUTONB_COMMAND doit-il tous les deux commencer par Global GUI 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 en tant que variable locale n'est pas initialisé à rien. C'est l'un de ces cas où vous avez besoin global


@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 n'est pas mis à jour, la solution est la déclaration Global GUI dans les méthodes qui le mettent à jour.


3 Réponses :


1
votes

Vous devez définir vos fonctions comme suit. Sinon, vous créez une variable locale GUI à l'intérieur de la portée de la fonction: xxx


0 commentaires

0
votes

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 comme première ligne de chaque fonction et il devrait fonctionner (fonctionne sur mon PC). EDIT: L'autre commentateur était un peu plus rapide :)


0 commentaires

0
votes

Vous devez écrire: xxx

à l'intérieur de toute fonction sinon, il le traitera comme une nouvelle variable locale de cette fonction.


0 commentaires