如何在没有窗口的情况下使用tkinter文件对话框

7

我想使用对话框和消息框,但不想打开tkinter窗口。

有人能教我如何禁用窗口,或如何重新创建窗口,或者向我展示一个不同的解决方案,以便我可以做这些事情。

所有的消息框都是相同的,我想尝试最多的是filedialog.askopenfile、filedialog.askdirectory和filedialog.asksaveasfilename。


1
欢迎来到StackOverflow。您尝试过在网上寻找教程吗?例如通过谷歌搜索此链接:http://www.python-course.eu/tkinter_dialogs.php 如果是这样,请展示您的努力,包括您所尝试的代码,这样我们可以更好地帮助您。 - matrixanomaly
可能是重复的问题:如何摆脱Python Tkinter根窗口? - fhdrsdg
@matrixanomaly,你的链接与问题中的tkinter窗口有什么关系? - root
2个回答

11

像这样吗?

from Tkinter import *
import tkFileDialog
import tkMessageBox

Tk().withdraw()
tkFileDialog.askopenfilename()
tkMessageBox.showerror("message", "words")

1
这种解决方案的问题在于它将文件对话框从任务栏中隐藏。如果其他窗口在文件对话框前面,你必须一个接一个地最小化这些窗口,或者在任务视图中寻找文件对话框,而不是任务栏。 - root

1
我在使用文件对话框和pygame的组合时,注意到了.withdraw()的一个问题。
当在根窗口上使用.withdraw()时,tkinter文件对话框也会从任务栏中消失。这意味着当文件对话框失去焦点(比如当你点击另一个(在我这里是pygame)窗口与之交互时),文件对话框会消失,并且无法通过点击任务栏中的图标重新打开,但它仍然在后台活动,这会永久暂停我的pygame应用程序(“软锁定”用户)。
解决方法是使用iconify()而不是withdraw(),正如其名称所示,它不会从任务栏中移除图标(允许用户重新打开窗口!),但会最小化窗口。
经过一些尝试,我最终得到了以下解决方案:
import tkinter
from tkinter import filedialog

root = tkinter.Tk() # } execute these lines once, to "initialise" tkinter
root.iconify()      # }

def prompt_files():
    try:
        file_paths = filedialog.askopenfilenames()
        root.iconify()
    except tkinter.TclError: # this error was raised once or twice while testing, just in case return an empty list
        return []
    else:
        return file_paths
def stop_tk(): # call this when you're done selecting files, to stop tkinter from running mainloop in the background
    root.destroy()

虽然它不是完美无缺的,但我还没有找到比它更好的东西。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接