如何避免在 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 关闭,则将创建 FrameA
的 frame
设置为 None
。
在 Util()
中,首先检查 frame
是否为 None
。如果是这样,请创建新的 FrameB
并将其分配给 self.frame
。否则关注现有 B.
我正在创建一个包含多个 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 关闭,则将创建 FrameA
的 frame
设置为 None
。
在 Util()
中,首先检查 frame
是否为 None
。如果是这样,请创建新的 FrameB
并将其分配给 self.frame
。否则关注现有 B.