如何避免在 wxPython 中创建相同的 window?

How to avoid creating the same window in wxPython?

我正在创建一个包含多个 windows 的应用程序。但是,大多数 windows 应该只创建一次。如果 window B 已经存在,那么应该显示现有的 window B,而不是创建新的 window B。可能是创建了 window B 但随后销毁了,当然,我必须再次创建 window B。

问题是我找不到办法知道 windows B 是否存在。

在下面的 "Initial Window" 示例中,您可以根据需要创建任意数量的辅助 windows。我需要一种方法来确保在给定时间只有一个辅助 window 存在。

我正在使用 Phython3.7 和 wxPython 4.0.3

import wx


class FrameA(wx.Frame):

    def __init__(self, parent, title):

        super().__init__(parent, title=title)

        self.i = 1

        self.panel   = wx.Panel(self)
        self.sizer   = wx.GridBagSizer(1, 1)

        self.buttonUtil = wx.Button(self.panel, label='New Window')

        self.sizer.Add(self.buttonUtil, pos=(0, 0))

        self.panel.SetSizer(self.sizer) 

        self.buttonUtil.Bind(wx.EVT_BUTTON, self.Util)

        self.Centre()

    def Util(self, event):

        frame = FrameB(None, title=str(self.i))
        frame.Show()
        self.i += 1

class FrameB(wx.Frame):

    def __init__(self, parent, title):

        super().__init__(parent, title=title)


app = wx.App()
frameA = FrameA(None, title='Initial Window')
frameA.Show()
app.SetTopWindow(frameA)
app.MainLoop()

FrameA 的对象变量中创建 FrameB 存储,例如作为 self.frame。在 FrameA 构造函数中将此变量初始化为 None.

FrameB 的构造函数中添加参数以存储正在创建的 FrameA(如果可以存在多个)。然后绑定到关闭事件,如果 B 关闭,则将创建 FrameAframe 设置为 None

Util() 中,首先检查 frame 是否为 None。如果是这样,请创建新的 FrameB 并将其分配给 self.frame。否则关注现有 B.