在wx.ComboBox小部件

时间:2015-09-11 11:38:07

标签: python combobox wxpython

我有一个带有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()

1 个答案:

答案 0 :(得分:0)

我很确定这是event.Veto()选项的用途 我可以在这里找到简单的例子:
http://zetcode.com/wxpython/events/