Ошибка атрибута: объект «Страница 1» не имеет атрибута «атрибуты»

#python #tkinter

Вопрос:

Я хочу поставить свое окно выше, и я использовал self.attributes("-topmost", True) для этого с. tkinter Но это поднимает

Ошибка атрибута: объект «Страница 1» не имеет атрибутов «атрибуты»

Я использовал self.lift() вместо этого это, но это не работает. Кто-нибудь может мне помочь?

 import tkinter as tk

x=input("Type something")

class Page(tk.Frame):
    def __init__(self, *args, **kwargs):
        tk.Frame.__init__(self, *args, **kwargs)
    def show(self):
        self.attributes("-topmost", True)
        
class Page1(Page):
   def __init__(self, *args, **kwargs):
       Page.__init__(self, *args, **kwargs)
       label = tk.Label(self, text="This is page 1")
       label.pack(side="top", fill="both", expand=True)

class Page2(Page):
   def __init__(self, *args, **kwargs):
       Page.__init__(self, *args, **kwargs)
       label = tk.Label(self, text="This is page 2")
       label.pack(side="top", fill="both", expand=True)

class Page3(Page):
   def __init__(self, *args, **kwargs):
       Page.__init__(self, *args, **kwargs)
       label = tk.Label(self, text="This is page 3")
       label.pack(side="top", fill="both", expand=True)

class MainView(tk.Frame):
    def __init__(self, *args, **kwargs):
        tk.Frame.__init__(self, *args, **kwargs)
        p1 = Page1(self)
        p2 = Page2(self)
        p3 = Page3(self) 

    buttonframe = tk.Frame(self)
    container = tk.Frame(self)
    buttonframe.pack(side="top", fill="x", expand=False)
    container.pack(side="top", fill="both", expand=True)

    p1.place(in_=container, x=0, y=0, relwidth=1, relheight=1)
    p2.place(in_=container, x=0, y=0, relwidth=1, relheight=1)
    p3.place(in_=container, x=0, y=0, relwidth=1, relheight=1)

    b1 = tk.Button(buttonframe, text="Page 1", command=p1.lift)
    b2 = tk.Button(buttonframe, text="Page 2", command=p2.lift)
    b3 = tk.Button(buttonframe, text="Page 3", command=p3.lift) 

    b1.pack(side="left")
    b2.pack(side="left")
    b3.pack(side="left") 


    p1.show()

if __name__ == "__main__":
    root = tk.Tk()
    main = MainView(root)
    main.pack(side="top", fill="both", expand=True)
    root.wm_geometry("400x400")
    root.mainloop()
 

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

1. .attributes('-topmost', True) применяется к окну, а не к раме. Так что используйте root.attributes(...) вместо этого.

Ответ №1:

Вы должны установить это в своем корневом Тз.

     def show(self):
        self.master.master.attributes("-topmost", True)
 

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

1. Лучшее применение self.winfo_toplevel().attributes("-topmost", True) .