我正在创建一个具有多个窗口的应用程序。但是,大多数窗口只能创建一次。如果窗口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()
答案 0 :(得分:1)
将创建的FrameB
存储在FrameA
中的对象变量中,例如为self.frame
。在FrameA
构造函数中,将此变量初始化为None
。
在FrameB
的构造函数中,添加参数以存储创建的FrameA
(如果可以存在多个)。然后绑定到关闭事件,以将frame
的创建FrameA
设置为None
(如果B关闭)。
首先在Util()
中检查frame
是否为None
。如果是这样,请创建新的FrameB
并将其分配给self.frame
。否则,将焦点放在现有的B上。