Python TKinter属性Simpledialog出错

Python TKinter属性Simpledialog出错,python,tkinter,python-3.6,Python,Tkinter,Python 3.6,我目前正试图通过Spyder使用Python3.6中的tkinter模块编写一些基本的用户输入框。我可以确认模块已加载,并且出现了选择simpledialog的选项,但我一直收到以下错误: AttributeError:模块“tkinter”没有属性“simpledialog” 我试图寻找其他选项,但其他用户输入选项在我的Python界面上似乎不起作用。它要么崩溃,要么数据结构不正确 有趣的是,在过去,我在Python中做过类似的事情,没有出现错误,但这一直是这个特定的编程片段 将tkinter

我目前正试图通过Spyder使用Python3.6中的tkinter模块编写一些基本的用户输入框。我可以确认模块已加载,并且出现了选择simpledialog的选项,但我一直收到以下错误:

AttributeError:模块“tkinter”没有属性“simpledialog”

我试图寻找其他选项,但其他用户输入选项在我的Python界面上似乎不起作用。它要么崩溃,要么数据结构不正确

有趣的是,在过去,我在Python中做过类似的事情,没有出现错误,但这一直是这个特定的编程片段

将tkinter作为tk导入 将pyodbc作为py导入 py.pooling=False 输入您的用户ID和密码并声明您的连接 对话框可能会在另一个屏幕上弹出打开 密码输入被屏蔽,不会显示在 变量浏览器 ID=tk.simpledialog.askstringPlease输入您的用户名,用户名: PW=tk.simpledialog.askstring请输入您的密码。, 密码:,show='*' CONN=tk.simpledialog.askstring请输入您的连接。, 连接: 我的预期结果是,将出现一个弹出窗口,我将能够获得与我使用的服务器保持稳定连接所需的用户信息

提前感谢您的建议

simpledialog不在tkinter中,而是在tkinter.simpledialog中,您必须导入它

import tkinter as tk
import tkinter.simpledialog

root = tk.Tk() # create main window
#root.iconify() # minimize main window 
root.withdraw() # hide main window 

answer = tkinter.simpledialog.askstring("Question", 'Your name:')
print(answer)

#root.destroy()  # should work without it
#root.mainloop() # should work without it

请参见

您可能在某个地方有一个tkinter.py文件,该文件隐藏了实际模块。进口tkinter;printtkinter.\uuuu文件\uuuuu将显示它所在的位置。我已经检查了它,我在这里得到了位置:C:\ProgramData\Anaconda3\lib\tkinter\u init\uuuuuuu.py在探索中,我注意到lib部分实际上在目录本身中是大写的,而Spyder是小写的。我知道Python是区分大小写的,所以你认为这可能是问题所在吗?这似乎已经解决了问题!非常感谢你。作为后续操作,当我获得用户输入时,我还会得到一个空白的弹出框。它只是说tk,没有其他输入/输出。这正常吗?我执行的代码是:python。。。ID=tksd.askstringPlease输入您的用户名,用户名:PW=tksd.askstringPlease输入您的密码,密码:,show='*'CONN=tksd.askstringPlease输入您的连接,连接:root.mainloop正常-这是Tk窗口主窗口。我手动创建,但tkinter可以自动创建。simpledialog是从Tk创建的,而不是作为独立程序运行。您可以使用root.iconify最小化主窗口,但必须手动创建root root=tk.tkt这才有意义。是否有任何方法可以让它在获取输入后自动关闭?我尝试过root.destroy和root.quit,但它们似乎对我不起作用。如果我使用root.iconify或root.draw(缩小窗口并从底部栏中删除),那么我就不需要root.destroy,甚至不需要root.mainloop。并且它在Linux Mint/Python 3.7上的终端上正常工作。如果我在某个IDE中运行相同的代码,那么它需要root.destroy。因此,它可能取决于它运行的位置。