Обновление ярлыков Tkitner при изменении строки файла конфигурации - PullRequest
0 голосов
/ 25 июня 2019

У меня есть 3 метки в моем меню, которые отображают путь к файлу 3 разных файлов / каталогов.У меня есть 3 кнопки, которые позволяют пользователю изменять указанные пути к файлам.При нажатии кнопки автоматически обновит файл config.ini.

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

Вот3 метода для моих команд кнопок:

def open_vend_direct():
    vend_directory = filedialog.askopenfilename(
        initialdir="/", title="Select file", filetypes=(("Excel Files (CSV)", "*.csv"), ("all files", "*.*")))
    parser = ConfigParser()
    parser.read('config.ini')
    parser.set('VendorList','List_Location',vend_directory)
    with open('config.ini', 'w') as f:
        parser.write(f)

def open_attach_direct():
    vend_attach_direct = filedialog.askdirectory()
    parser = ConfigParser()
    parser.read('config.ini')
    parser.set('VendorFile','file_Location',vend_attach_direct)
    with open('config.ini', 'w') as f:
        parser.write(f)


def open_log_direct():
    log_locate = filedialog.askdirectory()
    parser = ConfigParser()
    parser.read('config.ini')
    parser.set('LogFolder','log_location',log_locate)
    with open('config.ini', 'w') as f:
        parser.write(f)

Вот мои 3 кнопки и соответствующие им метки:

parser = ConfigParser()
parser.read('config.ini')

vend_list_button = ttk.Button(optionmenu, text='Vendor List Directory',
                              command=open_vend_direct).grid(column=1, row=1, sticky=W)
vend_list_locat = ttk.Label(optionmenu, text=parser.get('VendorList','list_location')).grid(
    column=2, row=1, sticky=(W, E))

############################
# row 2
vend_attach_button = ttk.Button(optionmenu, text='Vendor File Directory',
                                command=open_attach_direct).grid(column=1, row=2, sticky=W)
vend_attach_locat = ttk.Label(optionmenu, text=parser.get('VendorFile','file_location')).grid(
    column=2, row=2, sticky=(W, E))

###########################
# row 3
log_location_button = ttk.Button(
    optionmenu, text='Log Folder Preference', command=open_log_direct).grid(column=1, row=3, sticky=W)
log_locat = ttk.Label(optionmenu, text=parser.get('LogFolder','log_location')).grid(
    column=2, row=3, sticky=(W, E))

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

1 Ответ

1 голос
/ 25 июня 2019

На мой взгляд, у вас есть три варианта.Самым быстрым решением является изменение метки с помощью

ttk.label_name['text']="new text"

Лучшим вариантом является использование textvarable вместо просто текста.

Вы определяете его как:

my_text = stringvar()
my_text.set("inital text")

при определении метки вместоof text = "blablabla"

textvar = my_text

А для изменения метки просто используйте

my_text.set("new text")

Третий вариант - использовать функцию обновления.Который будет читать ваш файл инициализации каждый интервал и соответственно менять ваши метки.Если этот вариант вас интересует, прочитайте это https://riptutorial.com/tkinter/example/22870/-after--

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...