使用什么绑定来检测FlatNotebook选项卡页相对于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。
但没有将任何属性设置为Id 100。
您可以选择:

  • 将笔记本Id设置为100
  • 将Id排除在绑定之外,假设您只有1个平板笔记本
  • 获取绑定中的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)

这是一个非常灵活的系统,但意外发现已经离开了大楼,当你做出为数不多的选择之一时,这是行不通的。:(

最新更新