我第一次为Python3中的程序编写了一个Browse按钮。我一直在搜索互联网和这个网站,甚至是python标准库。
我找到了示例代码和对事物的非常肤浅的解释,但我找不到任何可以直接解决问题的方法,或者说是一个足够好的解释,因此我可以根据自己的需要自定义代码。 / p>
以下是相关摘录:
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
该方法是我在自己的自定义过程中发现的一些代码的混合体。似乎我终于让它工作了(有点),虽然它不完全是我需要它。
当我激活“浏览”按钮时出现此错误:NameError: global name 'filedialog' is not defined
。
我发现了一路上非常类似的问题,但我已经介绍了所有解决方案。我进入了IDLE的'filedialog'帮助部分,但也没有从那里收集任何东西。
有人会介意提供一个细分和一点指导;我的书中没有一本专门解决它,我已经检查了提供给其他人的所有解决方案 - 我输了。
答案 0 :(得分:59)
您得到的异常是告诉您filedialog
不在您的命名空间中。
filedialog
(和btw messagebox
)是一个tkinter模块,因此不会仅使用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
>>>
你应该使用例如:
>>> from tkinter import filedialog
>>> filedialog
<module 'tkinter.filedialog' from 'C:\Python32\lib\tkinter\filedialog.py'>
>>>
或
>>> import tkinter.filedialog as fdialog
或
>>> from tkinter.filedialog import askopenfilename
所以这适用于您的浏览按钮:
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 __name__ == "__main__":
MyFrame().mainloop()
答案 1 :(得分:2)
您是否尝试将自我前缀添加到fileName并替换Button上方的方法?随着自我,它在方法之间变得可见。
...
def load_file(self):
self.fileName = filedialog.askopenfilename(filetypes = (("Template files", "*.tplate")
,("HTML files", "*.html;*.htm")
,("All files", "*.*") ))
...
答案 2 :(得分:1)
我必须首先指定单个命令,然后使用*
来执行所有命令。
from tkinter import filedialog
from tkinter import *
答案 3 :(得分:0)
Tkinter 实际上是一个 python 包,或者一个 python 文件的文件夹。检查python源以找到它。 “tkinter.filedialog”是“tkinter.messagebox”的一部分尝试“from tkinter.messagebox import filedialog”获取文件对话框[python 3.7]。