Tkinter 窗口在关闭文件对话框后未关闭

4
我想在选择文件后关闭文件打开对话框。目前,使用我的代码,我可以选择一个文件,但是文件打开对话框一直保持打开状态,直到我点击“X”为止。我该如何在选择文件后关闭此窗口。
以下是我的代码:
import sys
from tkinter import *
from tkinter.filedialog import askopenfilename   

fname = "unassigned"

def openFile():
    global fname
    fname = askopenfilename()

if __name__ == '__main__':

    b = Button(text='File Open', command = openFile).pack(fill=X)
    mainloop()

    print (fname)

对话框应该在您单击“打开”后自动关闭...不是吗? - MrAlexBailey
它没有关闭。当我点击“打开”并选择一个文件后,它仍然保持打开状态。 - SSS
@SSS 它可以在Windows 8上运行,但是它不会打印出文件名。 - fdsa
1个回答

9
文件对话框已经很好地关闭了。我想你想说的是,在从对话框中选择文件后,你创建的用于容纳按钮的Tkinter窗口没有关闭。为了实现这一点,你需要稍微重构一下你的程序。
首先,你需要明确地创建一个Tk窗口来容纳按钮:
root = Tk()

您需要将该窗口列为按钮的父级:
Button(root, text='File Open', command = openFile).pack(fill=X)
#      ^^^^

最后,在openFile函数结束时,应该调用root窗口的destroy方法:

root.destroy()

这将导致窗口关闭并使Tkinter主循环退出。
总的来说,您的脚本将如下所示:
import sys
from tkinter import *
from tkinter.filedialog import askopenfilename   

fname = "unassigned"

def openFile():
    global fname
    fname = askopenfilename()
    root.destroy()

if __name__ == '__main__':

    root = Tk()
    Button(root, text='File Open', command = openFile).pack(fill=X)
    mainloop()

    print (fname)

是的,谢谢。那就是我所指的。它完全按照我的要求工作。 - SSS

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