Обновление ярлыков в ткинтер - PullRequest
0 голосов
/ 04 октября 2019

Я добавляю «секцию выбора файла» в мой код. Мне бы хотелось иметь две опции: сначала выбрать путь к файлу, а затем ввести путь к файлу.

Еще одна функция, которую я не смог реализовать, заключается в том, что если пользователь выбирает путь к файлу, этот путь появляется в разделе ввода.

Это часть кода, о которой я говорю:

from tkinter import filedialog
import tkinter as tk

class open_file:
    def __init__(self, master):
        self.master = master
        self.file_path = ''

        self.b1 = tk.Button(master,
               text = 'Open',
               command = self.open_file).grid(row=0, column=1)

        v = tk.StringVar(root, value = self.file_path)
        self.l1 = tk.Entry(master, width=24, textvariable=v).grid(row=0, column=0)


    def open_file(self):
        self.file_path = filedialog.askopenfilename(filetypes = (("Python Files", "*.py")
                                                             ,("All files", "*.*") ))

root = tk.Tk()
app = open_file(root)
root.mainloop()

1 Ответ

2 голосов
/ 04 октября 2019

Поскольку у вас есть StringVar, связанный с текстом, вам нужно будет использовать StringVar.set() для установки текста записи.

From http://effbot.org/tkinterbook/variable.htm:

Метод set обновляет переменную и уведомляет всех наблюдателей переменной. Вы можете передать значение правильного типа или строку.

Вы установили содержимое в StringVar, но оно не будет обновляться динамически при изменении self.file_path. В вашем случае вам нужно сделать StringVar (v) членом класса в функции __init__

 self.v = tk.StringVar(root, value = self.file_path)

Кроме того, когда вы хотите обновить путь к файлу, установите его с помощью self.v.set(String)

def open_file(self):
        self.file_path = filedialog.askopenfilename(filetypes = (("Python Files", "*.py")
                                                            ,("All files", "*.*") ))
        if self.file_path:  #check if file path is not None or empty
                self.v.set(self.file_path)
...