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



我正在运行一个脚本,提示用户输入一个文件。除了打开的文件浏览器之外,没有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不顶开

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

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

我想与大家分享以下代码行在我的案例中非常有效。但我不得不使用两个窗口。Wm_attributes ('-topmost', 1)和window=parent可以让这个工作,见下面:

import tkinter as tk
from tkinter import filedialog
window = tk.Tk()
window.wm_attributes('-topmost', 1)
window.withdraw()   # this supress the tk window
   filename = filedialog.askopenfilename(parent=window,
                                  initialdir="",
                                  title="Select A File",
                                  filetypes = (("Text files", "*.txt"), ("All files", "*")))
# Here, window.wm_attributes('-topmost', 1) and "parent=window" argument help open the dialog box on top of other windows

我也遇到了同样的问题。对我来说,它适用于:

file = filedialog.askopenfilename(parent=root)

所以,文件对话框在顶层窗口的前面没有取消注释root.attributes("-topmost", True)

我在当前窗口下方打开文件对话框窗口时遇到了相同的问题,但我无法用您的代码(在Python 2或3中)重现该问题。

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

文件对话框在下面打开:

from tkinter import filedialog, Tk
root = Tk()
root.withdraw()
input("nType anything> ")
file =  filedialog.askopenfilename()

要在顶部打开文件对话框,root.lift()root.attributes("-topmost", True)都可以工作(但后者是特定于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()

我正在运行python 3。所以在代码上有区别,但对我来说都是在顶部打开的。试着给它焦点,它应该放在最上面。

self.inpath.focus()

我不确定它是否会工作,因为我不能重现这个问题。

相关内容

  • 没有找到相关文章

最新更新