我正在尝试做一个弹出窗口,人们可以填写在一个输入框字符串。我已经经历了许多例子,但它不工作。
我在努力做到这一点:
var_entry = simpledialog.askstring("Test", "Test")
我收到此错误消息:
_tkinter.TclError: window ".!_querystring" was deleted before its visibility changed
先谢了!
编辑:发布错误的错误消息
我正在尝试做一个弹出窗口,人们可以填写在一个输入框字符串。我已经经历了许多例子,但它不工作。
我在努力做到这一点:
var_entry = simpledialog.askstring("Test", "Test")
我收到此错误消息:
_tkinter.TclError: window ".!_querystring" was deleted before its visibility changed
先谢了!
编辑:发布错误的错误消息
4条答案
按热度按时间disho6za1#
我知道这是一个老线索,但我有同样的问题,到目前为止还没有找到根本原因。
但是,如果其他人需要,此变通方法对我很有效:
isr3a4wc2#
我也能够通过使用上面的workaround suggested by John D来解决这个问题。
我对此做了一些研究,似乎在满足以下所有条件时会引发此异常。
simpledialog.askstring
方法的线程不是主线程。simpledialog.askstring
方法的线程不同。但是,我无法想出一个处理这个问题的过程。我希望这有助于解决问题。
gpfsuwkq3#
这个问题是因为askstring没有在主线程中调用,这是主线程,一定要在主线程中调用这个方法,比如这段代码就很好用。
并且这段代码将在关闭对话框窗口时抛出异常。
gmxoilav4#
如果没有你的代码示例,我不确定,但是我认为这个错误消息意味着你放置'askstring'返回值或initialvalue的变量在对话框窗口完成之前超出了作用域。当我看到这个错误消息时,我把变量声明放在了内部作用域之外。请原谅我在这里使用C概念进行讨论(大多数Python用户宁愿忽略)。
在循环作用域之外添加声明对我很有效。