Как получить имя файла после выбора в диалоговом окне с помощью Python Tkinter - PullRequest
0 голосов
/ 20 января 2019

Посоветуйте, пожалуйста, как получить полный путь к файлу в переменной после того, как я выбрал его, используя tkinter

Вся идея моего графического интерфейса заключается в следующем: 1. Есть несколько бутонов 2. Иметь адресную строку с полным адресом файла

Как только пользователь нажимает кнопку и выбирает файл >> путь к файлу отображается в адресной строке, а также сохраняется в отдельной переменной для последующего использования в коде

Я провел некоторое тестирование, но когда проверяю полученное значение, я получаю Нет.

def file_picker():
    """Pick enova .xlsx file"""
    path = filedialog.askopenfilename(filetypes=(('Excel Documents', '*.xlsx'), ('All Files', '*.*')))
    return path

file_button = tkinter.Button(root, text='Users File', width=20, height=3, 
bg='white', command=custom_functions.file_picker).place(x=30, y=50)

Кроме формы, в которой я нашел другой фрагмент кода, но он просто захватывает строку в интерфейсе GUI, но не сохраняет путь к файлу в какой-либо переменной:

def browsefunc():
    filename = filedialog.askopenfilename()
    pathlabel.config(text=filename)
    print(pathlabel)


browsebutton = tkinter.Button(root, text="Browse", command=browsefunc).pack()

pathlabel = tkinter.Label(root).pack()

Ожидаемый результат: https://imgur.com/a/NbiOPzG - к сожалению, я пока не могу опубликовать изображения, поэтому загрузил одно на imgur

1 Ответ

0 голосов
/ 20 января 2019

Чтобы захватить полный путь к файлу с помощью Tkinter, вы можете сделать следующее.Вывод вашего полного пути к файлу будет отображаться в поле «Запись» / адресной строке в соответствии с вашими требованиями в исходном сообщении.

Обновление

import tkinter
from tkinter import ttk, StringVar
from tkinter.filedialog import askopenfilename

class GUI:

    def __init__(self, window): 
        # 'StringVar()' is used to get the instance of input field
        self.input_text = StringVar()
        self.input_text1 = StringVar()
        self.path = ''
        self.path1 = ''

        window.title("Request Notifier")
        window.resizable(0, 0) # this prevents from resizing the window
        window.geometry("700x300")

        ttk.Button(window, text = "Users File", command = lambda: self.set_path_users_field()).grid(row = 0, ipadx=5, ipady=15) # this is placed in 0 0
        ttk.Entry(window, textvariable = self.input_text, width = 70).grid( row = 0, column = 1, ipadx=1, ipady=1) # this is placed in 0 1

        ttk.Button(window, text = "Enova File", command = lambda: self.set_path_Enova_field()).grid(row = 1, ipadx=5, ipady=15) # this is placed in 0 0
        ttk.Entry(window, textvariable = self.input_text1, width = 70).grid( row = 1, column = 1, ipadx=1, ipady=1) # this is placed in 0 1

        ttk.Button(window, text = "Send Notifications").grid(row = 2, ipadx=5, ipady=15) # this is placed in 0 0

    def set_path_users_field(self):
        self.path = askopenfilename() 
        self.input_text.set(self.path)

    def set_path_Enova_field(self):
        self.path1 = askopenfilename()
        self.input_text1.set(self.path1)

    def get_user_path(self): 
        """ Function provides the Users full file path."""
        return self.path

    def get_enova_path1(self):
        """Function provides the Enova full file path."""
        return self.path1


if __name__ == '__main__':
    window = tkinter.Tk()
    gui = GUI(window)
    window.mainloop()
    # Extracting the full file path for re-use. Two ways to accomplish this task is below. 
    print(gui.path, '\n', gui.path1) 
    print(gui.get_user_path(), '\n', gui.get_enova_path1())

Примечание. Я добавил комментарий, чтобы указать, где хранится полный путь к файлу, вмой пример это «путь» и «путь1».

...