【问题标题】:How to get the details of an event in wxPython如何在 wxPython 中获取事件的详细信息
【发布时间】:2011-06-29 23:31:44
【问题描述】:

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

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

处理事件的代码如下:

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

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

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

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

如何让代码正确执行?

非常感谢。

【问题讨论】:

  • 这是 wx.Slider 还是别的什么?看到 PyEventBinder 我有点困惑。 GetEventObject 应该存在于任何事件中。

标签: events event-handling wxpython


【解决方案1】:

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

import pdb; pdb.set_trace()

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

print dir(event)

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

【讨论】:

    【解决方案2】:

    以下适用于 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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-24
      • 1970-01-01
      相关资源
      最近更新 更多