Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 文件对话框、tkinter和打开文件_Python_Python 3.x_Tkinter_Global Variables_Filedialog - Fatal编程技术网

Python 文件对话框、tkinter和打开文件

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

我第一次在Python3中为一个程序编写一个浏览按钮。我一直在搜索互联网和这个网站,甚至是python标准库

我已经找到了示例代码和一些非常肤浅的解释,但是我还没有找到任何能够直接解决我遇到的问题的方法,或者一个足够好的解释,以便我可以根据自己的需要定制代码

以下是相关片段:

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 *