Python 打开第二个 window。为什么?

Python opens a second window. Why?

我有一段代码给我带来了一些麻烦。当我 运行 它时,我期望它 运行 而 filedialog.askopenfilename 而已。但是,它还会在屏幕的左上角打开一个小 Tk window。我不确定为什么,因为我的代码(据我所知)中没有任何内容需要这样的 Tk window.

你能帮我解释一下吗?

from getpass import getuser
from sys import platform
from tkinter import filedialog
import os

userID = getuser()

try:
    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)
except:
    print("My note: cannot execute")

最简单的方法是这样(创建一个Tk实例并立即.withdraw()它,这样它就不会弹出,它发生的原因是filedialog.askopenfilename()(或任何其他类似的window)需要一个master,如果有none,它会创建一个。这样的原因是因为Tk应该只有一个实例,所以所有这些额外的 windows 很可能是基于需要大师的 Toplevel(),但它们可以根据需要创建,因为它们不需要自己的 .mainloop() 或某物) :

from tkinter import Tk

root = Tk()
root.withdraw()

所以在你的代码中它看起来像这样:

from getpass import getuser
from sys import platform
from tkinter import filedialog, Tk
import os


root = Tk()
root.withdraw()

userID = getuser()

try:
    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)
except:
    print("My note: cannot execute")

另外,我建议您像这样处理异常(如果您不知道会发生什么):

except Exception as e:
    print(e)

这将打印出异常,因此您知道究竟引发了什么异常(并且还将符合 PEP 8 或某事,或者至少我的 IDE 本身不喜欢太宽泛的异常条款)