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 本身不喜欢太宽泛的异常条款)
我有一段代码给我带来了一些麻烦。当我 运行 它时,我期望它 运行 而 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 本身不喜欢太宽泛的异常条款)