如何通过按钮命令从TkInter filedialog.askopenfile获取文件名

问题描述 投票:0回答:1

我是python的新手,而Tk inter则更新。提前对不起,我可能在这里做任何明显的错误...

class application():
    def __init__(self):
        self.root = Tk()
        frameCSV = LabelFrame(self.root)

        Button(frameCSV, text="browse csv", command= self.browseCSV)

        Label(frameCSV,text=csvFilename ,bg='white').grid(row =1,column=1)

    def browseCSV(self):
        global csvFilename
        csvFilename = filedialog.askopenfilename(   initialdir="/Volumes/", title="select the file", filetypes=[("CSV files", ".csv"),("all files", "*.*")] )

frameCSV是我的根窗口中的一个框架我想在此框架内添加一个标签,其中包含所选文件的返回路径。

但不起作用

Traceback (most recent call last):
  File "/Users/guillaume/Downloads/uploader_v1_0_200312.py", line 106, in <module>
    f=application()
  File "/Users/guillaume/Downloads/uploader_v1_0_200312.py", line 70, in __init__
    Label(frameCSV,text=csvFilename ,bg='white').grid(row =1,column=1)
NameError: name 'csvFilename' is not defined

我在做什么错?我不明白为什么函数不将PATH传递给Label来显示它。

非常感谢您的帮助。

function button tkinter command
1个回答
0
投票

如果您希望在browseCSV()中选择文件后更新标签,则需要将StringVar与标签关联,然后在browseCSV()中对其进行更新:

class application():
    def __init__(self):
        self.root = Tk()
        self.csvFilename = StringVar()  # use instance variable
        ...
        Label(frameCSV, textvariable=self.csvFilename, bg='white').grid(row=1, column=1)
        ...

    def browseCSV(self):
        filename = filedialog.askopenfilename(initialdir="/Volumes/", title="select the file", 
                                              filetypes=[("CSV files", ".csv"),("all files", "*.*")])
        if filename:
            # a filename is selected, so update the label via StringVar
            self.csvFilename.set(filename)
© www.soinside.com 2019 - 2024. All rights reserved.