繁体   English   中英

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

[英]TopLevel window disappears when using askopenfilename, from tkinter.filedialog

对于我的程序,我希望用户选择一个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()方法是.grab_set() ,并且在选择文件后,将使TopLevel()窗口重新显示在Tk()顶部。

但是,这仍然意味着该窗口在选择文件时消失在Tk()窗口后面,我仍然很乐于找到解决方案,即使现在这只是视觉问题,而不是功能问题。

你可以只让Toplevel窗口短暂的窗口,然后将它保存在它的父窗口的顶部:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM