我在Rosetta Code - programming chrestomathy站点尝试了一个python代码示例,其中同一任务的解决方案以尽可能多的不同编程语言呈现。对于此任务,目标是从图形用户界面输入字符串和整数75000。代码如下所示:
import tkSimpleDialog
number = tkSimpleDialog.askinteger("Integer", "Enter a Number")
string = tkSimpleDialog.askstring("String", "Enter a String")
但是,当我尝试运行代码时,出现以下错误:
Traceback (most recent call last):
File "C:\Users\vix\Documents\.cache\GUIexample.py", line 3, in <module>
number = tkSimpleDialog.askinteger("Integer", "Enter a Number")
File "C:\Python27\lib\lib-tk\tkSimpleDialog.py", line 262, in askinteger
d = _QueryInteger(title, prompt, **kw)
File "C:\Python27\lib\lib-tk\tkSimpleDialog.py", line 189, in __init__
Dialog.__init__(self, parent, title)
File "C:\Python27\lib\lib-tk\tkSimpleDialog.py", line 53, in __init__
if parent.winfo_viewable():
AttributeError: 'NoneType' object has no attribute 'winfo_viewable'
问题出在哪里?
由于
答案 0 :(得分:15)
错误消息告诉您对话框需要父窗口。
使用Python 2.x,您可以使用以下命令创建根窗口:
import Tkinter
root = Tkinter.Tk()
如果您不想要隐藏根窗口,请使用:
root.withdraw()
有关详细信息,请参阅Python Tkinter Docs。
答案 1 :(得分:1)
我从未使用过askinteger
,但从错误消息判断,对话框看起来需要知道它的父对象,但你并没有告诉它应该是什么。尝试添加parent=widget
(其中“widget”是对其他一些小部件的引用 - 通常是根小部件)。我找不到任何说明这是必需的文档,但我猜是因为除了根窗口之外的所有Tkinter小部件都需要父级。
如果您在问题中显示的代码是完整代码,那么您会遗漏其他一些内容。你需要创建一个Tk
类的实例(称为“根”窗口),你需要启动事件循环(但是,对话框可能会运行它自己的事件循环,所以你可能没问题如果您只需要单个对话框)。