Tkinter — мой пользовательский значок «нарушает» окно верхнего уровня при его открытии

#python #tkinter #icons

#python #tkinter #Значки

Вопрос:

когда я открывал свое окно верхнего уровня, я всегда видел раздражающее и странное поведение .. в конце я понял, что это из-за моего пользовательского значка.

ниже приведен примерный код:

 from tkinter import *
from tkinter import ttk

class MainWindow:
    def __init__(self):
        self.parent=Tk()
        self.parent.geometry("494x410 370 100")
        self.parent.title("My Software - WITH ICON")
        self.parent.iconbitmap("icon.ico")

        Button = ttk.Button(self.parent, text="open a new widnow", command=self.OpenNewWindow)
        Button.place(x=16, y=16)

    def OpenNewWindow(self):
        self.obj = NewWindow(self)

class NewWindow:
    def __init__(self, mw):
        self.window, self.mw = Toplevel(mw.parent), mw
        self.window.geometry("200x150 360 200")
        self.window.title("New Window")
        self.window.iconbitmap("icon.ico") # it creates the issue..
        self.window.protocol("WM_DELETE_WINDOW", self.on_close)

        self.window.focus()
        self.mw.parent.attributes('-disabled', 1)
        self.window.transient(mw.parent)
        self.window.grab_set()
        self.mw.parent.wait_window(self.window)

    def on_close(self):
        self.mw.parent.attributes('-disabled', 0)
        self.window.destroy()

def main():
    app=MainWindow()
    app.parent.mainloop()

if __name__=="__main__":
    main()
  

чтобы было ясно, в чем проблема, я создаю GIF:

введите описание изображения здесь

здесь у нас есть два программного обеспечения, «без icon.py » и «с icon.py «. они одинаковые, но первый не использует мой пользовательский значок для своего второго окна.

как вы можете видеть, если я запускаю «с icon.py «на второе окно всегда будет что-то влиять, когда я его открою, но для «без icon.py «это «что-то» не существует.

в чем проблема? программное обеспечение открывает свое второе окно, фокусирует корневое (это проблема), а затем снова фокусирует второе окно. вы можете ясно видеть это из GIF.

как я могу решить проблему? и почему со значком по умолчанию это странное поведение не происходит?

Комментарии:

1. У вас все еще есть та же проблема после комментирования self.window.transient(mw.parent) ?

2. мм .. хороший вопрос. без self.window.transient(mw.parent) инструкции проблема кажется решаемой, но таким образом мое второе окно больше не мигает, когда я пытаюсь щелкнуть по родительскому. имейте в виду, что со значком по умолчанию мне не нужно удалять эту инструкцию.