对于我的程序,我希望用户选择一个file
,并且我正在使用tkinter.filedialog
库来执行此操作。但是,当打开askopenfilename
对话框时,TopLevel
窗口消失在主Tk()
窗口后面。
我将如何阻止这种情况发生?
这是我到目前为止写的代码:
from tkinter import *
from tkinter.filedialog import askopenfilename
class MainWin(Tk):
def __init__(self):
super(MainWin, self).__init__()
self.update()
pu = PopUp(self)
self.configure(width=500, height=300)
class PopUp(Toplevel):
def __init__(self, master):
super(PopUp, self).__init__(master)
def entry_set(entry, text):
entry.delete(0, 'end')
entry.insert(END, text)
item_file = StringVar()
item_entry = Entry(self, textvariable=item_file)
item_entry.place(x=80, y=60, height=20, width=300)
item_label = Label(self, text="item file: ", bg="gray74", relief="groove")
item_label.place(x=20, y=60, height=20, width=60)
item_button = Button(self, text="uD83DuDCC2", relief="groove",
command=lambda: entry_set(item_entry, askopenfilename()))
item_button.place(x=380, y=60, height=20, width=20)
self.configure(width=460, height=180)
if __name__ == '__main__':
win = MainWin()
win.mainloop()
编辑:
我已经意识到使用
.grab_set()
方法有效,并且会使 选择文件后,TopLevel()
窗口出现在Tk()
的顶部。
但是,这仍然意味着窗口在Tk()
窗口后面消失时,在选择文件时,我仍然很想找到解决方案,即使这只是一个视觉问题,而不是功能上的问题。
您可以将Toplevel
窗口作为瞬态窗口,然后将其保存在其父窗口的顶部:
class PopUp(Toplevel):
def __init__(self, master):
super(PopUp, self).__init__(master)
self.transient(master)