从tkinter.filedialog使用askopenfilename时,TopLevel窗口消失

时间:2019-05-24 05:26:10

标签: python python-3.x tkinter

对于我的程序,我希望用户选择一个$this->db->trans_complete();,而我正在使用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="\uD83D\uDCC2", 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()窗口后面,尽管现在这只是一个视觉问题,而不是功能问题,但我仍然很乐于找到解决方案。

1 个答案:

答案 0 :(得分:1)

您只需将Toplevel窗口设置为过渡窗口,然后将其保留在其父窗口的顶部:

class PopUp(Toplevel):
    def __init__(self, master):
        super(PopUp, self).__init__(master)
        self.transient(master)