Является ли вызов функции для обновления метки tkinter после выполнения команды кнопки причиной неожиданного поведения? - PullRequest
0 голосов
/ 28 марта 2020

Прежде всего позвольте мне начать с того, что я начал кодировать около 6 недель go в процессе самообучения, поэтому весьма вероятно, что этот подход все еще может быть полным беспорядком.

I У меня есть программа, работающая (хорошо для меня) в cli, но я хочу сделать ее пригодной для людей, которые падают в обморок, когда они видят простой белый текст на черном фоне, которым они должны управлять без мыши.

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

files_to_open = {'File_1':'', 'File_2':'', 'File_3':''}

def selectfiles_window():
    global message_window
    message_window = Tk()

    ...

    content = Label(message_window, text=get_open_file_status_txt(), **txt_status_general)
    content.pack(side='top')
    button_select_file1 = Button(message_window,text = 'File 1',font = txt_general['font'],command = lambda:(
select_file_action(name='File 1', filetypename='Excel workbook', extension='*.xlsx'),
content.configure(text=get_open_file_status_txt())))
    button_select_file1(side='bottom')
    message_window.mainloop()

def select_file_action(name, filetypename, extension):
    global files_to_open
    files_to_open[name] = filedialog.askopenfilename(title = f'Select {name}', filetypes=[(filetypename, extension)])


def get_open_file_status_txt():
    global files_to_open
    message =f'''
    [File_1] is {"NOT SET" if (files_to_open["File_1"] == "") else "SET"}'''
    return message

Я ожидал, что текст будет обновлен после закрытия диалогового окна файла (что частично работает, как и ожидалось).

Что я не понимаю: Если я нажму кнопку, чтобы выбрать File_1 и отменить ее в первый раз, значение для ключа File_1 будет установлено в (). В любое время после этого, если я нажму кнопку, чтобы выбрать File_1 и отменить его, значение для ключа File_1 будет установлено в ''. Если я выбираю файл, путь сохраняется как значение (также с первой попытки). Если я отменяю, он снова устанавливается на ''.

Кто-нибудь знает, почему значение устанавливается на () при первой отмене, но впоследствии работает так, как ожидалось?

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

Спасибо и наилучшими пожеланиями, Томас

1 Ответ

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

Оказывается, что вызов функции не был проблемой, скорее, это (странное для меня, но возможно, намеренное) поведение filedialog.askopenfilename, которое возвращает пустой кортеж, если отмена выбрана при первом вызове, но пустая строка на все последующие отмененные звонки.

...