如何在wxPython中获取事件的详细信息

时间:2011-06-29 23:31:44

标签: events event-handling wxpython

我有一段代码可以返回滑块生成的事件。

我将事件与self.Bind(wx.EVT_SCROLL,self.OnSlide)绑定。

处理事件的代码类似于:

def OnSlide(self,event):
    widget = event.GetEventObject()

这很好,但每次执行代码时都会抛出错误。它写着:

AttributeError: 'PyEventBinder' object has no attribute 'GetEventObject'

我希望能够看到哪个滑块生成了该事件,但每次尝试查找时都会出现错误。

如何让代码正确执行?

非常感谢提前。

2 个答案:

答案 0 :(得分:1)

要调试这样的事情,请将以下内容作为事件处理程序中的第一个语句:

import pdb; pdb.set_trace()

此时将停止执行程序并为您提供交互式提示。然后,您可以发出以下命令以找出可用的方法:

print dir(event)

当我第一次学习wxPython时,我发现这种技术非常宝贵。

答案 1 :(得分:0)

以下适用于Windows 7,wxPython 2.8.10.1,Python 2.5

import wx

class MyForm(wx.Frame):

    #----------------------------------------------------------------------
    def __init__(self):
        wx.Frame.__init__(self, None, title="Tutorial")

        # Add a panel so it looks the correct on all platforms
        panel = wx.Panel(self, wx.ID_ANY)

        slider = wx.Slider(panel, size=wx.DefaultSize)
        slider.Bind(wx.EVT_SLIDER, self.onSlide)

    #----------------------------------------------------------------------
    def onSlide(self, event):
        """"""
        obj = event.GetEventObject()
        print obj

#----------------------------------------------------------------------
# Run the program
if __name__ == "__main__":
    app = wx.App(False)
    frame = MyForm().Show()
    app.MainLoop()