tkinter askdirectory无法从导入的modu工作

2024-04-26 21:32:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在使用tkinter提供一个文件对话框(在python3.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)

如果我把它放在另一个模块中并从该模块导入,那么它将一直打印到“postdrach”,然后挂起。你知道吗

你知道吗子模块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)

它永远不会通过“postdrach”,文件对话框也不会弹出。你知道吗

有人知道我做错了什么吗?我认为这与tkinter窗口没有出现有关,因为它不是主模块,但是有什么方法可以超越它吗?你知道吗


Tags: 模块thefromimporttkinterdefrootfolder
1条回答
网友
1楼 · 发布于 2024-04-26 21:32:09

你的两个版本都不起作用。两者都给出'module' object is not callable。你知道吗

你必须使用

 root = Tk.Tk()

而不是

 root = Tk()

然后这两个版本都起作用了。你知道吗


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

import tkinter as tk

然后你有

root = tk.Tk()

相关问题 更多 >