2012-05-30 18 views
0

我正在使用帶有下拉菜單的SearchCtrl,並且遇到了一些事件問​​題。當我點擊搜索按鈕旁邊的小箭頭screenshot searchctrl時,觸發了EVT_SEARCHCTRL_SEARCH_BTN,這不是我想要的。我只想在點擊一個項目後觸發EVT_MENU_RANGE,而不是在點擊它之前觸發EVT_SEARCHCTRL_SEARCH_BTNwxpython SearchCtrl觸發兩個事件

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到菜單綁定,這不會導致問題。代碼在我註釋掉搜索按鈕綁定時按預期工作。

UPDATE
顯然,這不是一個問題,但searchctrl的 '功能'。我嘗試了wxpython演示,菜單也出現了,如果我只點擊搜索按鈕,而不是箭頭。這顯然是一個按鈕,而不是我認爲的那兩個按鈕。
有沒有辦法完成我原來的要求?我必須手動修改一個textctrl,還是有其他解決方案?

回答

1

我看過的所有例子都建議你在調用菜單綁定時需要指定一個ID範圍。

也許默認情況下它會綁定到意想不到的東西......?

編輯 - 在您的更新來看,它很可能是你將需要做出一個自定義的控制,我..

+0

沒有,菜單綁定是沒有問題的。當我註釋掉搜索按鈕綁定代碼正常工作。 – BrtH

+0

什麼是self.search設置爲? –

+0

如果您嘗試'self.search_ctrl.bind'而不是'self.Bind',會發生什麼?這個例子似乎建議你應該使用控件的綁定函數:http://nullege.com/codes/search/wx.EVT_SEARCHCTRL_SEARCH_BTN –