【问题标题】:wxPython dictionary of classes to events they callwxPython 类字典到他们调用的事件
【发布时间】:2010-05-12 01:44:56
【问题描述】:

我想知道是否有一个字典包含他们调用的事件的 wxPython 类的字符串版本(如 wx.Button 的“按钮”)。这就是我想要的:{'Button': wx.EVT_BUTTON, ...}。模块中或网络上的任何地方都有这样的字典吗?

【问题讨论】:

    标签: python class dictionary events wxpython


    【解决方案1】:

    wxGlade 知道这一点:对于每个 Widget,都有一个派生自 class ManagedBaseclass EditWidget,其类属性 events 包含 Widget 发送的事件的名称:

    例如在widgets/bitmap_button/bitmap_button.py 你会发现

    class EditBitmapButton(ManagedBase):
    
        events = ['EVT_BUTTON']
    

    您可以通过导入所有这些类(我认为可以自动完成)并读取它们的events 属性来收集您想要的信息。

    【讨论】:

      【解决方案2】:

      这就是我所做的(可能在某个时候从邮件列表中获取):

      for i in dir(wx):
          if i.startswith('EVT_'):
              print i
      

      显然这不是您所要求的,但结果非常直观,可以弄清楚什么是什么。

      【讨论】:

        【解决方案3】:

        阐述 DrBloodmoney 所说的话:

        adict = {}
        for k,v in dir(wx):
            if k.startswith('EVT_'):
               adict[k[3:]] = v
        

        但是;请注意,尽管 EVT_SOMETHING 是一个事件类并且是唯一的,但不能保证 Event 对象的 ID 号是唯一的(不要与 Python 的 id() 内置函数混淆)。

        此外,当您“无”说:“我想知道是否有一个字典包含他们调用的事件的 wxPython 类的字符串版本(如 wx.Button 的 'Button')。”我认为您的意思是“对于事件,小部件也明确具有事件处理程序;事件处理程序通常是类方法,例如 wx.Button.OnPaint()。”

        要查找任何小部件具有的事件处理程序,例如,当您不使用 wxGlade 时,您可以打开每个小部件的 Python 模块文件。例如:

        \python\Lib\site-packages\wx-2.8-msw-unicode\wx\lib\buttons.py

        还要记住,虽然 wx 小部件可能无法处理像 wx.EVT_BUTTON 这样的事件类型,但这并不意味着它不能。而且,这样的小部件可能会将某些事件类型传递给它的父级,无论那里或它的父级中是否有事件处理程序;就像 wx.Panel 小部件一样。

        【讨论】:

          猜你喜欢
          • 2010-10-19
          • 2011-01-19
          • 2011-10-08
          • 2017-01-07
          • 1970-01-01
          • 1970-01-01
          • 2010-09-24
          • 2023-03-24
          • 1970-01-01
          相关资源
          最近更新 更多