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

时间:2018-09-25 16:24:39

标签: python-3.x window wxpython-phoenix

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

问题是我找不到找到Windows B是否存在的方法。

在下面的“初始窗口”示例中,您可以创建任意数量的次要窗口。我需要一种方法来确保在给定时间仅存在一个辅助窗口。

我正在使用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()

1 个答案:

答案 0 :(得分:1)

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

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

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