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 控制台的主要内容,如果未能解决你的问题,请参考以下文章

GUI编程3 tkinter

Python中的tkinter库简单案例详解

Python Tkinter之布局

Python3 tkinter窗口中如何输入和输出

Tkinter循环“Tkinter没有响应”

tkinter如何设置好看的按钮