运行Python代码调用tkinter.filedialog时额外弹出空白Tk窗口的原因是什么
现象原因
Tkinter的所有控件、对话框组件都必须依附于主Tk实例窗口运行,你调用filedialog.askopenfilename时,如果当前程序没有已经创建的Tk主窗口,Tkinter会自动在后台隐式创建一个空白的Tk主窗口,这个就是你看到的左上角空白小窗口的来源,属于Tkinter的内置机制,和你是否主动写了创建窗口的代码无关。
修复方案
你只需要在调用文件对话框前手动创建Tk主窗口,主动将其隐藏,等对话框调用完毕后销毁主窗口即可,修改后的代码如下:
from getpass import getuser from sys import platform from tkinter import Tk, filedialog import os userID = getuser() try: # 手动创建主Tk窗口 root = Tk() # 隐藏主窗口,避免显示空白界面 root.withdraw() if platform == "linux" or platform == "linux2": userpath = os.path.join("/", "home", userID, "Checklist_PDFs") print(userpath) filedialog.askopenfilename(initialdir=userpath, title="Select a file") elif platform == "darwin": userpath = os.path.join("/", "home", userID, "Checklist_PDFs") print(userpath) elif platform == "win32": userpath = os.path.join("c:", "\\", "Users", userID, "My Documents", "Checklist_PDFs") print(userpath) # 调用完成后销毁主窗口释放资源 root.destroy() except: print("My note: cannot execute")
内容的提问来源于stack exchange,提问作者Robin
相关产品推荐
相关产品推荐

