Я использую tkinter для предоставления диалогового окна файла (в python 3.6), которое позволяет пользователям выбирать каталог. Он отлично работает, когда он является подфункцией в том же модуле, но если я переместу эту подфункцию в отдельный модуль, а затем попытаюсь импортировать ее из этого модуля, она больше не работает. Вместо этого код просто зависает, когда диалоговое окно файла должно появиться, но оно никогда не появляется.
рабочий код: Это работает, если я запускаю основную функцию
from tkinter import Tk
from tkinter.filedialog import askdirectory
def SelectDirectory():
# start up the tk stuff to have a file directory popup
print('start')
root = Tk()
print('postroot')
root.withdraw()
print('postwithdraw')
# let the user pick a folder
basepath = askdirectory(title='Please select a folder')
print('postselection')
root.destroy()
print('postdestroy')
return basepath
def main():
ans = SelectDirectory()
print(ans)
Если я вместо этого помещаю это в другуюмодуль и импортируйте его из этого модуля, затем он будет печатать до 'postwithdraw', а затем просто зависнет.
submod.py:
from tkinter import Tk
from tkinter.filedialog import askdirectory
def SelectDirectory():
# start up the tk stuff to have a file directory popup
print('start')
root = Tk()
print('postroot')
root.withdraw()
print('postwithdraw')
# let the user pick a folder
basepath = askdirectory(title='Please select a folder')
print('postselection')
root.destroy()
print('postdestroy')
return basepath
, а затем запустите:
from submod import SelectDirectory
def main():
ans = SelectDirectory()
print(ans)
Он никогда не проходит после 'postwithdraw', и никогда не появляется диалоговое окно файла.
Кто-нибудь знает, что я здесь не так делаю? Я думаю, что это как-то связано с тем, что окно tkinter не появляется, поскольку оно не является основным модулем, но есть ли способ обойти это?