Как правильно использовать wx.NewIdRef()?Python

Программы на Python
Anonymous
Как правильно использовать wx.NewIdRef()?

Сообщение Anonymous »

Я использую wxPython версии 4.0.7.post2 и Python версии 3.8.2. Я включил предупреждения, чтобы отслеживать, что мне нужно изменить при подготовке к обновлению Python и wxPython. Одно из предупреждений, которое я получаю, заключается в том, что wx.NewId() устарел. Согласно документации, я должен использовать wx.NewIdRef(), который должен быть полной заменой. Действительно, замена всех экземпляров wx.NewId() на wx.NewIdRef() работает, но все функции, принимающие идентификатор в качестве параметра, вызывают новое предупреждение:

Предупреждение об устаревании: требуется целое число (получил тип WindowIDRef).
Неявное преобразование в целые числа с использованием int устарело и может
быть удалено в будущей версии Python.

Хорошо, давайте вместо этого будем использовать wx.NewIdRef().GetId(). то есть:

Код: Выделить всё

my_id = wx.NewIdRef().GetId()
target.Bind(wx.EVT_MENU, self.foo, id=my_id)
Это выдает следующую ошибку:

wx._core.wxAssertionError: утверждение C++ "gs_autoIdsRefCount[winid] ! =
ID_FREE" не удалось выполнить в ....\src\common\windowid.cpp(110) в
`anonymous-namespace'::IncIdRefCount(): идентификатор должен быть сначала зарезервирован
Хорошо, тогда похоже, что передача wx.NewIdRef запускает неявное преобразование __int__(), что, если я сделаю это: my_id = wx .NewIdRef().__int__()?
Та же ошибка. Есть ли в wx.NewIdRef функция для резервирования вручную? Нет.
Так в чем же дело? Как мне правильно использовать wx.NewIdRef()? И могу ли я вместо этого использовать wx.Window.NewControlId()?

Подробнее здесь: https://stackoverflow.com/questions/787 ... -correctly

Вернуться в «Python»