📜  如果另一个窗口打开,则阻止窗口 tkinter - Python (1)

📅  最后修改于: 2023-12-03 15:38:58.335000             🧑  作者: Mango

如果另一个窗口打开,则阻止窗口 tkinter - Python

在使用 Python 的 tkinter 模块创建应用程序时,可能需要防止用户在程序运行过程中打开多个窗口。本文将介绍如何使用 tkinter 实现此功能。

解决方案

使用 Tkinter 的 Toplevel 类创建子窗口,并将它们绑定到主窗口上。如果用户尝试打开新的子窗口,则会检查是否已经存在打开的子窗口。如果已经存在,则会激活该子窗口,否则将创建一个新的子窗口。

请参考下面的代码片段:

import tkinter as tk

class Application(tk.Frame):
    def __init__(self, master=None):
        super().__init__(master)
        self.master = master
        self.master.protocol("WM_DELETE_WINDOW", self._on_close)

        self.windows = []
        self.pack()

    def new_window(self):
        for window in self.windows:
            if window.winfo_exists():
                window.lift()
                return

        window = tk.Toplevel(self.master)
        window.protocol("WM_DELETE_WINDOW", self._on_close)
        self.windows.append(window)

    def _on_close(self):
        self.windows = [window for window in self.windows if window.winfo_exists()]

        if not self.windows:
            self.master.destroy()

if __name__ == "__main__":
    root = tk.Tk()
    app = Application(master=root)
    app.mainloop()

此代码创建了一个带有一个“新建窗口”按钮的主窗口。点击按钮将打开一个新的子窗口。如果已经存在一个子窗口,则将激活该子窗口,否则将创建一个新的子窗口。当所有子窗口都关闭时,主窗口也将关闭。

总结

本文介绍了如何使用 tkinter 防止用户在程序运行时打开多个窗口。通过检查是否已经存在打开的子窗口来实现此功能,可以确保应用程序的稳定性和可靠性。