使用什么绑定来检测 FlatNotebook 标签页关闭 vis FNB_X_ON_TAB

What bind to use to detect FlatNotebook tab page closing vis FNB_X_ON_TAB

我正在使用 wxPython FlatNotebook 小部件并启用了 FNB_X_ON_TAB 样式。但是什么绑定事件会触发此操作(单击选项卡中的 x 将其关闭)?

import wx
import wx.lib.agw.flatnotebook as fnb


class MyFrame(wx.Frame):
    def __init__(self, parent):
        wx.Frame.__init__(self, parent, -1, "FlatNotebook Demo")
        panel = wx.Panel(self)
        notebook = fnb.FlatNotebook(panel, -1)
        self.Bind(fnb.EVT_FLATNOTEBOOK_PAGE_CLOSED, self.popup_close_tab, id=100)
        for i in range(3):
            caption = "Page %d" % (i + 1)
            notebook.AddPage(self.CreatePage(notebook, caption), caption)
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(notebook, 1, wx.ALL | wx.EXPAND, 5)
        panel.SetSizer(sizer)
    
    def CreatePage(self, notebook, caption):
        '''
        Creates a simple :class:`Panel` containing a :class:`TextCtrl`.
        :param `notebook`: an instance of `FlatNotebook`;
        :param `caption`: a simple label.
        '''
        p = wx.Panel(notebook)
        wx.StaticText(p, -1, caption, (20, 20))
        wx.TextCtrl(p, -1, "", (20, 40), (150, -1))
        return p

    def popup_close_tab(self, event):
        print("popup_close_tab")
        #self.close_tab()

# our normal wxApp-derived class, as usual
app = wx.App(0)
frame = MyFrame(None)
app.SetTopWindow(frame)
frame.Show()
app.MainLoop()

您在 Bind 命令中强制小部件 Id 为 100。
但是没有任何东西被设置为 100 的 Id。
您有以下选择:

  • 将笔记本 ID 设置为 100
  • 将 Id 保留在绑定之外,假设您只有 1 个 FlatNotebook
  • 获取绑定中的Id
  • 绑定到非自身的小部件

所以:

  • notebook = fnb.FlatNotebook(panel, 100)
  • self.Bind(fnb.EVT_FLATNOTEBOOK_PAGE_CLOSED, self.popup_close_tab)
  • self.Bind(fnb.EVT_FLATNOTEBOOK_PAGE_CLOSED, self.popup_close_tab, id=notebook.GetId())
  • notebook.Bind(fnb.EVT_FLATNOTEBOOK_PAGE_CLOSED, self.popup_close_tab)

这是一个非常灵活的系统,但是机缘巧合已经离开了大楼,当您做出少数几个选择之一时,那是行不通的。 :)