繁体   English   中英

如何限制TopLevel Window Python Tkinter的数量

[英]How to limit the number of TopLevel Window Python Tkinter

这是我的代码。 当我按CTRL + S时 ,会弹出一个顶级窗口。 但是,当我再次按CTRL + S时,它将在其顶部弹出另一个窗口,依此类推。

如何改进代码,以便在按CTRL + S时仅弹出一个窗口。

from tkinter import *
from tkinter import messagebox

class MainWindow(Frame):

    def __init__(self, master = None):
        Frame.__init__(self, master)

        self.master = master

        self.master.title("Tournament Software")

        self.menu()

    def menu(self):

        menu = Menu(self.master)
        self.master.config(menu=menu)

        participant = Menu(menu, tearoff=False)
        participant.add_command(label="Add participant", accelerator="Ctrl+S", command=self.addparticipant_window)
        menu.add_cascade(label="Participants", menu=participant)

        self.bind_all('<Control-s>', lambda e: menu.after(100,self.addparticipant_window))

    def addparticipant_window(self):
        participantWindow = Toplevel()
        participantWindow.geometry("400x350")
        participantWindow.resizable(False, False)

        top_frame = Frame(participantWindow, bg='cyan', width=450, height=50, pady=3)
        top_frame.grid(row=0, sticky="ew")

root = Tk()
root.iconbitmap("Icon.ico")
root.geometry("500x400")
root.resizable(False, False)


app = MainWindow(root)

root.mainloop()

谢谢,我对此很陌生,请帮助我。

from tkinter import *
from tkinter import messagebox

class MainWindow(Frame):

    def __init__(self, master = None):
        Frame.__init__(self, master)

        self.master = master

        self.master.title("Tournament Software")

        self.menu()
        self.popup = None

    def open_up(self):
        if self.popup is None or not self.popup.top.winfo_exists():
            self.popup = addparticipant_window()
        else:
            self.popup.top.lift(self.master)

    def menu(self):

        menu = Menu(self.master)
        self.master.config(menu=menu)

        participant = Menu(menu, tearoff=False)
        participant.add_command(label="Add participant", accelerator="Ctrl+S", command=self.open_up)
        menu.add_cascade(label="Participants", menu=participant)

        self.bind_all('<Control-s>', lambda e: menu.after(100,self.open_up))

class addparticipant_window:

    def __init__(self):
        self.top = Toplevel()
        self.top.geometry("400x350")
        self.top.resizable(False, False)

        top_frame = Frame(self.top, bg='cyan', width=450, height=50, pady=3)
        top_frame.grid(row=0, sticky="ew")

root = Tk()
root.geometry("500x400")
root.resizable(False, False)


app = MainWindow(root)

root.mainloop()

暂无
暂无

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

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