filedialog,tkinter和打开文件 [英] filedialog, tkinter and opening files

查看:206
本文介绍了filedialog,tkinter和打开文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在第一次为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)
除了:
消息box.showerror(Open Source File,Failed to read file \\\
'%s'%filename)
return

该方法是我在自定义中找到的一些代码的混合体。我似乎终于开始工作了(有点儿了),尽管它并不完全是我需要它的。



当我激活浏览按钮时出现此错误: NameError:全局名称'filedialog'未定义



我发现一些相似的问题,我提到的所有解决方案都覆盖了。我进入IDLE的'filedialog'帮助部分,但并没有从那里收集任何东西。



有人会介意在这方面提供细分和一些指导;我的书中没有一本专门介绍它,并且我已经检查了提供给其他人的所有解决方案 - 我迷路了。 解决方案

你得到的例外是告诉你 filedialog 不在你的名字空间中。
filedialog (和btw messagebox )是一个tkinter模块,所以它不会被导入到 from tkinter import *

 >>> from tkinter import * 
>>> filedialog
Traceback(最近一次调用最后一次):
在< module>文件中的< interactive input>
NameError:name'filedialog'未定义
>>>

您应该使用例如:

 >>> from tkinter import filedialog 
>>> filedialog
>>>

 >>>将tkinter.filedialog导入为fdialog 

 >>>从tkinter.filedialog导入askopenfilename 

所以这可以用于浏览按钮:

 从tkinter导入* 
从tkinter.filedialog导入askopenfilename
从tkinter.messagebox导入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 ),
(所有文件,*。*)))
如果fname:
尝试:
print(在这里:self.settings [template] .set(fname))
除了:#< - 裸体除外是一个坏主意
showerror(Open Source File,Failed to read file \\\
'%s'%fname)
return


if __name__ ==__main__ :
MyFrame()。mainloop()


I'm working for the first time on coding a Browse button for a program in Python3. I've been searching the internet and this site, and even python standard library.

I have found sample code and very superficial explanations of things, but I haven't been able to find anything that addresses the problem I'm having directly, or a good enough explanation so I can customize code to my needs.

Here is the relevant snippet:

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

The method is a hybrid of some code I found along the way with my own customizations. It seems like I finally got it to work (kinda), though its not exactly how I need it.

I get this error when I activate the 'Browse' button: NameError: global name 'filedialog' is not defined.

I've found fairly similar issues along the way but all the solutions suggested I have covered. I went into the 'filedialog' help section of IDLE but didn't glean anything from there either.

Would someone mind providing a break down and a little guidance on this; none of my books address it specifically, and I've checked all the solutions provided to others—I'm lost.

解决方案

The exception you get is telling you filedialog is not in your namespace. filedialog (and btw messagebox) is a tkinter module, so it is not imported just with 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
>>> 

you should use for example:

>>> from tkinter import filedialog
>>> filedialog
<module 'tkinter.filedialog' from 'C:\Python32\lib\tkinter\filedialog.py'>
>>>

or

>>> import tkinter.filedialog as fdialog

or

>>> from tkinter.filedialog import askopenfilename

So this would do for your browse button:

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

这篇关于filedialog,tkinter和打开文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆