【问题标题】:wxpython SearchCtrl two events triggeredwxpython SearchCtrl 触发了两个事件
【发布时间】:2012-05-30 21:05:32
【问题描述】:

我正在使用带有下拉菜单的 SearchCtrl,但我遇到了一些事件问​​题。当我点击搜索按钮旁边的小箭头 时,EVT_SEARCHCTRL_SEARCH_BTN 被触发,这不是我想要的。我只希望在我点击一个项目后触发EVT_MENU_RANGE,而不是在我点击它之前触发EVT_SEARCHCTRL_SEARCH_BTN

self.search_ctrl = wx.SearchCtrl(self.panel_1, -1,
                                 style=wx.TE_PROCESS_ENTER)
self.search_menu = wx.Menu()
self.search_items = {"text1":"value1", "text2":"value2"}
for txt in self.search_items:
    self.search_menu.Append(-1, txt)
self.search_ctrl.SetMenu(self.search_menu)
self.Bind(wx.EVT_SEARCHCTRL_SEARCH_BTN, self.search, self.search_ctrl)
self.Bind(wx.EVT_MENU_RANGE, self.onSearchMenu)

虽然我可能应该在菜单绑定中添加 id,但这不会导致问题。当我注释掉搜索按钮绑定时,代码按预期工作。

更新
显然这不是问题,而是 searchctrl 的“功能”。我尝试了 wxpython 演示,如果我只是单击搜索按钮而不是箭头,菜单也会出现。它显然是一个按钮,而不是我认为的两个按钮。
有没有办法完成我最初的要求?是否必须手动修改textctrl,还是有其他解决方案?

【问题讨论】:

    标签: python events wxpython


    【解决方案1】:

    我看到的所有示例都建议您在调用菜单绑定时需要指定一个 ID 范围。

    也许默认情况下它会绑定到意想不到的东西...?

    编辑 - 根据您的更新,您似乎需要为我制作一个自定义控件..

    【讨论】:

    • 不,菜单绑定不是问题。当我注释掉搜索按钮时,代码按预期工作。
    • 如果您尝试使用self.search_ctrl.bind 而不是self.Bind,会发生什么?此示例似乎建议您应该使用控件的绑定功能:nullege.com/codes/search/wx.EVT_SEARCHCTRL_SEARCH_BTN
    • 根据一篇文章,这两者本质上是相同的,除非事件处理层次结构中的其他地方发生了奇怪的事情:wiki.wxpython.org/self.Bind%20vs.%20self.button.Bind
    • 我很确定我以前遇到过这个问题,我认为如果您检查控件 ID 发送的事件,您会看到一个 wx.EVT_MENU_RANGE 来自搜索按钮 ID 而不是菜单商品 ID
    • 尝试为每个控件和菜单项分配 ID,然后绑定到这些特定的 ID。就目前而言,它们都绑定到同一个 -1 ID...
    猜你喜欢
    • 2015-03-12
    • 1970-01-01
    • 2017-06-09
    • 1970-01-01
    • 2014-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多