Окно TopLevel исчезает при использовании askopenfilename, из tkinter.filedialog - PullRequest
0 голосов
/ 24 мая 2019

Для моей программы я хочу, чтобы пользователь выбрал 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() после выбора файла.

Тем не менее, это все еще означает, что окно исчезает за окном Tk() во время выбора файла, я все равно хотел бы найти решение, даже если это теперь просто визуальная проблема, а не функциональная.

1 Ответ

1 голос
/ 24 мая 2019

Вы можете просто сделать окно Toplevel временным, после чего оно останется поверх родительского окна:

class PopUp(Toplevel):
    def __init__(self, master):
        super(PopUp, self).__init__(master)
        self.transient(master)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...