Je travaille pour la première fois à coder un bouton Parcourir pour un programme en Python3. J'ai fait des recherches sur Internet et sur ce site, et même python bibliothèque standard.
J'ai trouvé un exemple de code et des explications très superficielles, mais je n'ai rien trouvé qui réponde directement au problème que j'ai ou une explication suffisante pour pouvoir personnaliser le code en fonction de mes besoins.
Voici l'extrait pertinent:
Button(self, text = "Browse", command = self.load_file, width = 10)\
.grid(row = 1, column = 0, sticky = W) .....
def load_file(self):
filename = filedialog.askopenfilename(filetypes = (("Template files", "*.tplate")
,("HTML files", "*.html;*.htm")
,("All files", "*.*") ))
if filename:
try:
self.settings["template"].set(filename)
except:
messagebox.showerror("Open Source File", "Failed to read file \n'%s'"%filename)
return
La méthode est un hybride de code que j'ai trouvé en cours de route avec mes propres personnalisations. Il semble que je l’ai enfin obtenu (un peu), bien que ce ne soit pas exactement ce dont j’avais besoin.
J'obtiens cette erreur en activant le bouton 'Parcourir': NameError: global name 'filedialog' is not defined
.
J'ai trouvé des problèmes assez similaires en cours de route, mais toutes les solutions suggérées ont été couvertes. Je suis allé dans la section d'aide 'filedialog' de IDLE mais je n'y ai rien appris non plus.
Est-ce que cela vous dérangerait de fournir une ventilation et quelques conseils à ce sujet? aucun de mes livres ne l'aborde de manière spécifique et j'ai vérifié toutes les solutions proposées aux autres - je suis perdu.
L'exception que vous obtenez est de vous dire que filedialog
n'est pas dans votre espace de noms. filedialog
(et btw messagebox
) est un module tkinter, il n'est donc pas importé avec from tkinter import *
>>> from tkinter import *
>>> filedialog
Traceback (most recent call last):
File "<interactive input>", line 1, in <module>
NameError: name 'filedialog' is not defined
>>>
vous devriez utiliser par exemple:
>>> from tkinter import filedialog
>>> filedialog
<module 'tkinter.filedialog' from 'C:\Python32\lib\tkinter\filedialog.py'>
>>>
ou
>>> import tkinter.filedialog as fdialog
ou
>>> from tkinter.filedialog import askopenfilename
Donc, cela ferait pour votre bouton de navigation:
from tkinter import *
from tkinter.filedialog import askopenfilename
from tkinter.messagebox import showerror
class MyFrame(Frame):
def __init__(self):
Frame.__init__(self)
self.master.title("Example")
self.master.rowconfigure(5, weight=1)
self.master.columnconfigure(5, weight=1)
self.grid(sticky=W+E+N+S)
self.button = Button(self, text="Browse", command=self.load_file, width=10)
self.button.grid(row=1, column=0, sticky=W)
def load_file(self):
fname = askopenfilename(filetypes=(("Template files", "*.tplate"),
("HTML files", "*.html;*.htm"),
("All files", "*.*") ))
if fname:
try:
print("""here it comes: self.settings["template"].set(fname)""")
except: # <- naked except is a bad idea
showerror("Open Source File", "Failed to read file\n'%s'" % fname)
return
if __== "__main__":
MyFrame().mainloop()
Avez-vous essayé d’ajouter le préfixe personnel au nom de fichier et de remplacer la méthode située au-dessus du bouton? Avec le soi, cela devient visible entre les méthodes.
...
def load_file(self):
self.fileName = filedialog.askopenfilename(filetypes = (("Template files", "*.tplate")
,("HTML files", "*.html;*.htm")
,("All files", "*.*") ))
...
Je devais d'abord spécifier des commandes individuelles, puis utiliser le *
apporter tout le commandement.
from tkinter import filedialog
from tkinter import *