簡體   English   中英

如何通過按鈕命令從 TkInter filedialog.askopenfile 獲取文件名

[英]how to get filename from TkInter filedialog.askopenfile from a button command

我對 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

我究竟做錯了什么? 我不明白為什么該函數不將 PATH 傳遞給Label以顯示它。

非常感謝你的幫助。

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

但是,我在 SublimeText 中進行構建時收到此消息:objc[3025]: Class FIFinderSyncExtensionHost 在 /System/Library/PrivateFrameworks/FinderKit.framework/Versions/A/FinderKit (0x7fff85a04cd0) 和 /System/Library/PrivateFrameworks 中實現/FileProvider.framework/OverrideBundles/FinderSyncCollaborationFileProviderOverride.bundle/Contents/MacOS/FinderSyncCollaborationFileProviderOverride (0x10c6e1cd8)。 將使用兩者之一。 哪個是未定義的

這是否意味着我應該擔心什么?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM