wxpython - 使用什么绑定来检测 FlatNotebook 标签页关闭 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()
解决方案
您Id
将Bind
命令中的小部件强制设置为 100。
但没有设置任何 ID 为 100。
您有以下选项:
- 将笔记本 ID 设置为 100
- 假设您只有 1 个 FlatNotebook,请将 Id 排除在绑定之外
- 获取绑定中的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)
这是一个非常灵活的系统,但是当你做出少数几个选择之一时,偶然性已经离开了大楼,这是行不通的。:)
推荐阅读
- javascript - 使用 js 和 jquery 添加文本链接
- android - 在 RecyclerView 中使用画布自定义视图
- javascript - 如何在一个函数下合并javascript中的加载事件和更改事件?
- swift - swift中的文本字段底线问题
- c++ - 如何在 Qt 中设计异步包装器返回值?
- c - Add manual salt with password to generate SHA1 in C
- ios - Convert Codable object to Dictionary without Bool turning to NSNumber
- kubernetes - 如何在 Kubernetes 入口控制器中将请求 uri 的一部分作为自定义标头传递
- c# - 具有正确日期时间格式的 SQLDateTime 溢出
- c# - 如何使用 C# 在 Azure SQL 数据库中保存和存储数据