Python - Tkinter'da Çoklu Pencere Kullanımı Hakkında

grab_set metodunun toplevel sınıfı örnekleri arasından kendi örneğine odaklıyor olması lazım.
Pencereler arası geçiş için şöyle bir şey düşündüm.

from tkinter import *
import random 

child_window_list = []

class MainWindow(Tk):
    def __init__(self):
        super().__init__()
        self.place_widgets()
        self.mainloop()

    def place_widgets(self):
        button = Button(self,text="Bana Tıkla!",command=self.open_new_window)
        button.pack()

    def open_new_window(self):
        Window(parent=self,group=child_window_list)
        Window(parent=self,group=child_window_list)
        random.choice(child_window_list).grab_set()


class Window(Toplevel):
    def __init__(self,parent,group=None):
        self.parent = parent
        self.group = group
        super().__init__(self.parent)
        group.append(self)
        self.setup()    
        
    def setup(self):
        self.protocol("WM_DELETE_WINDOW",self.destroy_)
        self.geometry("600x600")
        self.footer = Frame(self,bg="white",height=80)
        self.footer.pack(side="bottom",fill="x")
        self.prev_button = Label(self.footer,text="<",bg="ghostwhite",font=("System",25))
        self.prev_button.pack(side="left",padx=50,pady=40)
        self.prev_button.bind("<Button-1>",self.prev_window)
        self.next_button = Label(self.footer,text=">",bg="ghostwhite",font=("System",25))
        self.next_button.pack(side="right",padx=50,pady=40)
        self.next_button.bind("<Button-1>",self.next_window)
    
    def next_window(self, event):
        self.grab_release()
        self.group[self.group.index(self)+1].grab_set() 
    
    def prev_window(self, event):
        self.grab_release()
        self.group[self.group.index(self)-1].grab_set()                                                            
                            
    def destroy_(self):
        self.destroy()

MainWindow()

Ayrıca sizin dediğiniz gibi artarda 3 tane pencere açılınca yalnızca birini kilitlemesi gibi bir sorun yaşamadım. Verdiğiniz kodda oluşturulan toplevel örneklerinin parentinin olmamasından dolayı oluyor olabilir.

2 Beğeni