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

2024-09-30 22:17:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我对python非常陌生,对Tkinter更是陌生。 对于我在这里可能犯的任何明显错误,请提前道歉

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是我的根窗口中的一个框架。我想在这个框架中添加一个带有所选文件返回路径的Label

但它不起作用

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

我做错了什么? 我不明白为什么函数不传递路径到Label来显示它

非常感谢你的帮助


Tags: csvtextselfapplicationinitdefrootlabel
2条回答

如果希望在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)

但是,在执行内置SublimiteText时,我收到了以下消息: objc[3025]:类FIFinderSyncExtensionHost在/System/Library/PrivateFrameworks/FinderKit.framework/Versions/A/FinderKit(0x7fff85a04cd0)和/System/Library/PrivateFrameworks/FileProvider.framework/OverrideBundles/FinderSyncCollaborationFileProviderOverride.bundle/Contents/MacOS/FinderSyncCollaborationFileProviderOverride中实现(0x10c6e1cd8)。将使用其中一个。哪一个未定义

这意味着我应该担心什么吗

相关问题 更多 >