如何让Tkinter askopenfilename()在其他窗口之上打开?

时间:2015-08-03 01:12:30

标签: python tkinter tk

我正在运行一个脚本,提示用户输入文件。除了打开的文件浏览器外没有gui。我有2个选项:浏览文件,或使用askdirectory()选择整个文件夹。后者打开所有其他窗口,但第一个窗口打开所有,我必须最小化其他窗口才能找到它。

以下是我用于这些操作的方法

from Tkinter import Tk
from tkFileDialog import askdirectory, askopenfilename

root = Tk()
root.withdraw()

self.inpath = askdirectory()  # To open entire folder
Path = askopenfilename()      # Open single file

root.destroy()   # This is the very last line in my main script.

这是我的代码中与Tk相关的所有内容。 askdirectory打开,askopenfilename没有。

有没有办法迫使它在顶部打开?

5 个答案:

答案 0 :(得分:4)

root.wm_attributes('-topmost', 1)为我做了。老实说,我发现它在另一个SO线程中: - )。

答案 1 :(得分:3)

我有同样的问题。 对我来说,它适用于:

file = filedialog.askopenfilename(parent=root)

因此,文件对话框位于顶级窗口的前面,没有取消注释root.attributes("-topmost", True)

答案 2 :(得分:1)

我在当前窗口下面打开了同样的文件对话框窗口问题,但我无法用你的代码重现这个问题(在Python 2或3中)。

这是问题发生的最小示例(上下文是Windows 10,Python 3,脚本是从空闲中调用的,并注意input函数:

文件对话框在下面打开:

from tkinter import filedialog, Tk

root = Tk()
root.withdraw()
input("\nType anything> ")

file =  filedialog.askopenfilename()

要在顶部打开文件对话框,root.lift()root.attributes("-topmost", True)工作(但后者为specific for Windows

from tkinter import filedialog, Tk

root = Tk()
#root.attributes("-topmost", True) # this also works
root.lift()
root.withdraw()
input("\nType anything> ")

file =  filedialog.askopenfilename()

答案 3 :(得分:0)

我正在运行python 3.x所以代码有所不同,但两者都为我打开了。尝试着重点,它应该放在首位。

self.inpath.focus()

我不确定它是否会起作用,因为我无法重现这个问题。

答案 4 :(得分:0)

我想分享以下几行在我的案例中表现出色。但是我必须同时使用window.wm_attributes('-topmost',1)和window = parent才能使这项工作,请参见下文:

 ---------
 | 7 | 5 |
 ---------
 ^
 |
 buffer