最小tkSimpleDialog示例中的错误

时间:2012-04-18 08:00:29

标签: python tkinter

我在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'

问题出在哪里?

由于

2 个答案:

答案 0 :(得分:15)

错误消息告诉您对话框需要父窗口。

使用Python 2.x,您可以使用以下命令创建根窗口:

import Tkinter
root = Tkinter.Tk()

如果您不想要隐藏根窗口,请使用:

root.withdraw()

有关详细信息,请参阅Python Tkinter Docs

答案 1 :(得分:1)

我从未使用过askinteger,但从错误消息判断,对话框看起来需要知道它的父对象,但你并没有告诉它应该是什么。尝试添加parent=widget(其中“widget”是对其他一些小部件的引用 - 通常是根小部件)。我找不到任何说明这是必需的文档,但我猜是因为除了根窗口之外的所有Tkinter小部件都需要父级。

如果您在问题中显示的代码是完整代码,那么您会遗漏其他一些内容。你需要创建一个Tk类的实例(称为“根”窗口),你需要启动事件循环(但是,对话框可能会运行它自己的事件循环,所以你可能没问题如果您只需要单个对话框)。