TKinter (filedialog.askdirectory) 冻结 Spyder 控制台
Posted
技术标签:
【中文标题】TKinter (filedialog.askdirectory) 冻结 Spyder 控制台【英文标题】:TKinter (filedialog.askdirectory) freezing Spyder console 【发布时间】:2018-10-13 22:55:20 【问题描述】:我在其他问题中注意到 Spyder 中的 TKinter 存在(或曾经存在)几个问题。我已经在 IDLE 中使用了一段时间,但我正在转向 Spyder,并且遇到了一些问题。
我在 Windows 7 Enterprise 上运行 Python 3.6.4 和 Spyder 3.2.8,来自 Anaconda 1.8.4。
当我尝试使用一些 TKinter 函数(如 filedialog.askdirectory
)时,Spyder 的控制台冻结。
我一直在阅读不同的论坛,但仍然没有人遇到相同的问题或解决此问题的方法。
这是一个可以在 IDLE 中工作但在 SPYDER 中无效的简单代码:
import os
from tkinter import Tk, filedialog
Tk().withdraw()
print("Done WITHDRAW")
currentdir= os.getcwd()
print("Done GETCWD")
filename= filedialog.askdirectory(title="Select folder", initialdir=currentdir)
print("Done ASKDIRECTORY")
结果,我得到:
runfile('M:/Users/KPK2/.../hello.py', wdir='M:/Users/KPK2/...')
Done WITHDRAW
Done GETCWD
控制台继续运行,等待 ASKDIRECTORY 弹出一个新窗口来选择文件。在 IDLE 中它工作得很好。 有谁知道哪个可能是问题和一些可能的解决方案?
我阅读了其他线程解决方案,例如更新到 Spyder 3.0(我已经有 3.2.8)或更改首选项中“控制台”的一些“外部模块”,但我的首选项窗口上没有这样的选项卡(不要'不知道该怎么做)。
谢谢。
【问题讨论】:
(这里是 Spyder 维护者) 你说控制台一直在运行,等待 ASKDIRECTORY 弹出一个新窗口来选择文件。你到底是什么意思?是否出现选择目录的文件对话框? 它没有。这就是我说它等待函数弹出一个新窗口时的意思。窗口永远不会出现。 奇怪,它适用于我在 Linux 上。您能否在新控制台中运行代码之前运行%gui tk
并重试?
当我注释掉 Tk().withdraw() 时,问题似乎解决了。但是这样我总是需要打开 TKinter 窗口才能使我的软件工作。在 IDLE 中,即使提款也可以使用。有什么建议吗?
Tk().withdraw() 防止 TKinter GUI 的小窗口弹出。我非常想在每次不打开这个 GUI 窗口的情况下工作。在 IDLE 中我可以保留 Tk().withdraw() 函数,但在 Spyder 中它似乎不可能(至少在 Windows 中)。
【参考方案1】:
在运行您的代码之前尝试在控制台上运行此命令 %gui tk。
另一种方法是转到Tools > Preferences > IPython Console > Graphics > Graphics backend
并在那里选择tkinter
。
这对我有用 :) 答案在这里找到了https://groups.google.com/forum/#!topic/spyderlib/rFJhJZgjZTE
【讨论】:
这似乎对我不起作用,但注释掉withdraw
确实有效。以上是关于TKinter (filedialog.askdirectory) 冻结 Spyder 控制台的主要内容,如果未能解决你的问题,请参考以下文章