Вот версия, которая не создает двойное окно. Я включил большинство предложений, которые я сделал в комментариях, за исключением одного относительно определения функций внутри других функций. Следующее все еще делает это, потому что это позволило очень легко избежать использования global
переменных (которые обычно считаются плохой практикой программирования).
Обратите внимание, что функции update()
нет. Значения двух tkinter.Label
s теперь хранятся в двух tkinter.StringVar
s объектах, а не в обычных строках Python. A StringVar
является одним из tkinter
так называемых «переменных» классов. Их главная особенность заключается в том, что они заставляют все виджеты, ссылающиеся на них, автоматически обновляться при каждом изменении их содержимого. Чтобы использовать их в Label
, они указываются с помощью опции textvariable=
( вместо опции text=
) при вызове конструктора.
Вот некоторая документация Я нашел о них более подробную информацию о том, как они работают.
import tkinter as tk
from tkinter.filedialog import askopenfilename, asksaveasfilename
def excel():
""" Undefined. """
pass
def main():
def get_input_file_location():
input_file_location.set(askopenfilename())
def get_output_file_location():
output_file_location.set(asksaveasfilename(confirmoverwrite=False))
root = tk.Tk()
root.title('test')
root.resizable(width=True, height=True)
input_file_location = tk.StringVar()
input_file_location.set('<undefined>')
output_file_location = tk.StringVar()
output_file_location.set('<undefined>')
input_file = tk.Button(root, text="Input data",
command=get_input_file_location)
input_file.grid(row=0, column=0)
input_file_value = tk.Label(root, textvariable=input_file_location,
bg='white')
input_file_value.grid(row=1, column=0)
output_file = tk.Button(root, text='Compiled data save loacation',
command=get_output_file_location)
output_file.grid(row=4, column=0)
output_file_value = tk.Label(root, textvariable=output_file_location,
bg='white')
output_file_value.grid(row=5, column=0)
startButton = tk.Button(root, text='start', bg='light green',
command=excel)
startButton.grid(row=7)
blank_ui = [tk.Label(root, text='') for _ in range(2)]
blank_ui[0].grid(row=2)
blank_ui[1].grid(row=6)
root.mainloop()
if __name__ == '__main__':
main()