Словарь классов wxPython для событий, которые они вызывают - PullRequest
1 голос
/ 12 мая 2010

Мне было интересно, существует ли словарь, содержащий строковые версии класса wxPython (например, «Button» для wx.Button) для вызываемых ими событий. Вот что я хочу: {'Button': wx.EVT_BUTTON, ...}. Есть ли такой словарь где-нибудь в модуле или в Интернете?

Ответы [ 3 ]

0 голосов
/ 13 мая 2010

wxGlade знает об этом: для каждого Widget есть class EditWidget, полученный из class ManagedBase, который имеет атрибут класса events, содержащий имена событий, отправленных Widget:

например. в widgets / bitmap_button / bitmap_button.py вы найдете

class EditBitmapButton(ManagedBase):

    events = ['EVT_BUTTON']

Вы можете собрать необходимую информацию, импортировав все эти классы (я думаю, это можно сделать автоматически) и прочитав их атрибут events.

0 голосов
/ 26 апреля 2012

Чтобы разъяснить, что сказал DrBloodmoney:

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

Тем не менее, имейте ввиду, что хотя EVT_SOMETHING является классом событий и является уникальным, нет гарантии, что идентификационный номер объекта Event является уникальным (не путать со встроенной функцией Python id ()).

Также, когда вы, «Нет», говорите: «Мне было интересно, есть ли словарь, содержащий строковые версии класса wxPython (например,« Button »для wx.Button) для вызываемых ими событий». Я предполагаю, что вы имеете в виду «для событий, которые виджет явно имеет и обработчики событий; обработчиками событий обычно являются методы класса, такие как wx.Button.OnPaint ()».

Чтобы узнать, какие обработчики событий есть у любого виджета, и когда вы, например, не используете wxGlade, вы можете открыть файл модуля Python каждого виджета. Например:

\ питон \ Lib \ сайта-пакеты \ WX-2,8-ММЗ-юникода \ WX \ Lib \ buttons.py

Также помните, что виджет wx может не обрабатывать тип события, такой как wx.EVT_BUTTON, но это не значит, что он не может. А также, что такой виджет может передавать некоторые типы событий до своего родителя, независимо от того, есть ли там обработчик события или в его родителе; как виджет wx.Panel.

0 голосов
/ 12 мая 2010

Это то, что я делаю (возможно, когда-то было взято из списка рассылки):

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

Ясно, что это не совсем то, что вы просите, но результат довольно интуитивно понятен, чтобы выяснить, что и зачем.

...