gpt4 book ai didi

python - tkinter Askdirectory 不适用于导入的模块

转载 作者:太空宇宙 更新时间:2023-11-03 20:17:06 24 4
gpt4 key购买 nike

我一直在使用 tkinter 提供一个文件对话框(在 python 3.6 中),它允许用户选择一个目录。当它是同一模块中的子功能时,它工作正常,但如果我将该子功能移动到单独的模块中,然后尝试从该模块导入它,它就不再工作。相反,当文件对话框应该弹出时,代码只是挂起,但它从未出现。

工作代码:如果我运行 main 函数,这将起作用

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 窗口未出现有关,因为它不是主模块,但有什么方法可以解决这个问题吗?

最佳答案

您的两个版本都不起作用。两者都给出“模块”对象不可调用

你必须使用

 root = Tk.Tk()

而不是

 root = Tk()

然后两个版本都可以工作。

<小时/>

也许Tk.Tk()中的两个Tk看起来很奇怪,但通常我们使用小写的tk而不是Tk > 在

import tkinter as tk

然后你就得到了

root = tk.Tk()

关于python - tkinter Askdirectory 不适用于导入的模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58384059/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com