Как получить имя файла из TkInter filedialog.askopenfile из команды кнопки - PullRequest
0 голосов
/ 16 марта 2020

Я совершенно новичок в 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 - это рамка в моем окне root. Я хотел бы добавить внутрь этого кадра 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 для его отображения.

Большое спасибо за вашу помощь.

Ответы [ 2 ]

0 голосов
/ 20 марта 2020

однако, у меня есть это сообщение при выполнении сборки в SublimeText: objc [3025]: класс FIFinderSyncExtensionHost реализован как в /System/Library/PrivateFrameworks/FinderKit.framework/Versions/A/FinderKit (0x7fff85a04cd0), так и / System / Библиотека / PrivateFrameworks / FileProvider.framework / OverrideBundles / FinderSyncCollaborationFileProviderOverride.bundle / Contents / MacOS / FinderSyncCollaborationFileProviderOverride (0x10c6e1cd8). Один из двух будет использован. Какой из них не определен

означает ли это что-то, о чем я должен беспокоиться?

0 голосов
/ 17 марта 2020

Если вы хотите, чтобы метка обновлялась после выбора файла в 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)
...