Python 文件对话框、tkinter和打开文件
我第一次在Python3中为一个程序编写一个浏览按钮。我一直在搜索互联网和这个网站,甚至是python标准库 我已经找到了示例代码和一些非常肤浅的解释,但是我还没有找到任何能够直接解决我遇到的问题的方法,或者一个足够好的解释,以便我可以根据自己的需要定制代码 以下是相关片段:Python 文件对话框、tkinter和打开文件,python,python-3.x,tkinter,global-variables,filedialog,Python,Python 3.x,Tkinter,Global Variables,Filedialog,我第一次在Python3中为一个程序编写一个浏览按钮。我一直在搜索互联网和这个网站,甚至是python标准库 我已经找到了示例代码和一些非常肤浅的解释,但是我还没有找到任何能够直接解决我遇到的问题的方法,或者一个足够好的解释,以便我可以根据自己的需要定制代码 以下是相关片段: Button(self, text = "Browse", command = self.load_file, width = 10)\ .grid(row = 1, column = 0, sticky
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
该方法是我在过程中发现的一些代码与我自己的定制的混合。看起来我终于让它开始工作了(有点),尽管这并不是我所需要的
激活“浏览”按钮时出现此错误:name错误:未定义全局名称“filedialog”
我在这一过程中发现了相当类似的问题,但我已经涵盖了所有建议的解决方案。我进入了IDLE的“filedialog”帮助部分,但也没有从中获得任何信息
是否有人介意提供一个细分和一点关于这方面的指导;我的书中没有一本专门提到这个问题,我已经检查了提供给其他人的所有解决方案——我迷路了。您是否尝试过在文件名中添加self前缀并替换按钮上方的方法?对于self,它在方法之间变得可见
...
def load_file(self):
self.fileName = filedialog.askopenfilename(filetypes = (("Template files", "*.tplate")
,("HTML files", "*.html;*.htm")
,("All files", "*.*") ))
...
得到的例外情况是告诉您
filedialog
不在您的命名空间中。
filedialog
(顺便说一句messagebox
)是一个tkinter模块,因此它不仅仅是从tkinter导入的导入的*
>>> 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 *
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()
从tkinter导入*
从tkinter.filedialog导入askopenfilename
从tkinter.messagebox导入淋浴ROR
类MyFrame(框架):
定义初始化(自):
帧。\uuuu初始化\uuuuu(自)
self.master.title(“示例”)
self.master.rowconfigure(5,权重=1)
self.master.columnconfigure(5,权重=1)
自网格(粘性=W+E+N+S)
self.button=button(self,text=“Browse”,command=self.load\u文件,宽度=10)
self.button.grid(行=1,列=0,粘性=W)
def加载_文件(自):
fname=askopenfilename(文件类型=(“模板文件”,“*.tplate”),
(“HTML文件”,“*.HTML;*.htm”),
(“所有文件”、“*”))
如果fname:
尝试:
打印(“它来了:self.settings[“template”].set(fname)”)
除了:#我必须先指定单个命令,然后使用*
将所有命令都引入命令
from tkinter import filedialog
from tkinter import *
你进口了吗<代码>从tkinter导入文件对话框
谢谢。你知道,我把它们都从tkinter导入时弄糟了(只是没有完全正确),因为我没有完全正确,所以我把我的错误鉴定到了一个我没有犯错误的地方。我的问题是:我认为“从tkinter进口*”进口了所有tkinter。那么,为什么这些产品必须单独进口呢?你能给我指一些有关这方面的文件吗?谢天谢地,阿加尼没有发现任何与简单、切中要害的解释有关的链接。也许你运气更好。检查第一个python,这个解决方案的开头一句告诉您为什么需要这两条语句。filedialog是一个模块,因此它不是通过“从tkinter导入*”导入的,必须单独导入。“从tkinter导入filedialog”“从tkinter导入*”挑剔术语:这些是模块,不是命令。
>>> 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()
from tkinter import filedialog
from tkinter import *