我有一个带有Combobox的wx.Frame。在Combobox中进行选择时,将调用特定函数。
我对ComboBox产生了不良影响。 当ComboBox具有焦点时,鼠标滚轮的任何移动都会改变选择,因此会触发不同的功能。
在实践中很难记住你必须将焦点放在焦点上以“保存”原始选择,这样,当触发的功能每隔几秒钟完成时,GUI的可用性就不好了。
我尝试使用
捕捉鼠标事件无济于事self.Bind(wx.EVT_MOUSEWHEEL,self.donothing,self.mycombobox)
哪种方法可以防止鼠标信号影响组合框?
EDIT
如果你想玩代码,这里有一些你可以执行和测试。
只需执行,用鼠标进行选择,然后播放鼠标滚轮。我不希望选择改变。我无法捕捉鼠标轮发出的事件,无论它是什么。
import wx
class Myframe(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None)
pan = wx.Panel(self)
self.cbx = wx.ComboBox(pan, -1, pos=(10,30),
choices=["SEARCH", "SELECT", "PASS"],
style=wx.CB_DROPDOWN )
self.cbx_2 = wx.ComboBox(pan, -1, pos=(10,60),
choices=["LOOK", "GO", "FILL"],
style=wx.CB_DROPDOWN )
self.Bind(wx.EVT_MOUSEWHEEL, self.do_nothing) # to no avail
self.Bind(wx.EVT_COMBOBOX, self.on_selection, self.cbx)
self.Bind(wx.EVT_COMBOBOX, self.on_selection_2, self.cbx_2)
def on_selection(self, evt):
"""I do not want this to be executed inadvertently when
moving mousewheel"""
print self.cbx.GetStringSelection()
#evt.Skip(False) # this is the default behavior anyway
def on_selection_2(self, evt):
"""this is another combobox. dont mind if mouse move it or not"""
print self.cbx.GetStringSelection()
def do_nothing(self, evt):
""
print 'on events pit' # never catched !!!
#evt.Skip(False) # this is the default behavior anyway
if __name__ == "__main__":
App = wx.PySimpleApp()
Myframe().Show()
App.MainLoop()