【问题标题】:How to avoid creating the same window in wxPython?如何避免在 wxPython 中创建相同的窗口?
【发布时间】:2018-09-26 05:25:57
【问题描述】:

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

问题是我找不到知道窗口 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()

【问题讨论】:

    标签: python-3.x window wxpython


    【解决方案1】:

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

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

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

    【讨论】:

    • 那么,wxPython 中没有内置机制来跟踪窗口/框架?
    • @kbr85 自己跟踪它很简单,不需要 wxPython 为你做这件事
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-02
    • 1970-01-01
    • 2015-01-12
    • 1970-01-01
    • 1970-01-01
    • 2018-05-20
    相关资源
    最近更新 更多