Tkinter - Автоматически закрывает окно верхнего уровня после выбора файла - PullRequest
0 голосов
/ 27 сентября 2019

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

Проблема в том, что он открывает три окна Tkinter, и все они остаются открытыми после выбора файла.

from tkinter import *
from tkinter import filedialog

top = Toplevel()
root = Tk()
root.fileName = filedialog.askopenfilename(filetypes = (("data migration","*.xlsx"),("data migration","*.csv")))
top.destroy()
top.update()

В дополнение к вышеупомянутым проблемам, когда я пытаюсь закрыть эти сохраняющиеся окна, он закрывает Python.

Пока все решения, которые я нашел, все они добавляют кнопку, которая, чтоЯ пытаюсь избежать, если это возможно.

Ответы [ 2 ]

0 голосов
/ 28 сентября 2019

Комбинированное решение:

from tkinter import *
from tkinter import filedialog

root = Tk()

top = Toplevel()

def func():
    fileName = filedialog.askopenfilename(filetypes = (("data migration","*.xlsx"),("data migration 2","*.csv")))
    #do whatever you need to do with your filename
    print (fileName)
    top.destroy()

def quit():
    root.destroy()    

func()
quit()

root.mainloop()
0 голосов
/ 27 сентября 2019

Вместо этого создайте функцию, и в конце вызовите ее top.destroy():

from tkinter import *
from tkinter import filedialog

root = Tk()

top = Toplevel()

def func():
    fileName = filedialog.askopenfilename(filetypes = (("data migration","*.xlsx"),("data migration","*.csv")))
    #do whatever you need to do with your filename
    print (fileName)
    top.destroy()

func()

root.mainloop()
...