2013-12-17 3 views
2

Попытки сделать WxPython TextCtrl реагировать на ENTER, я получаю ошибку утверждения:WxPython TextCtrl ошибка утверждения: wx.wxEVT_COMMAND_TEXT_ENTER не экземпляр PyEventBinder

self.fileNameInput = wx.TextCtrl (self, style=wx.TE_PROCESS_ENTER) 
self.fileNameInput.Bind (wx.wxEVT_COMMAND_TEXT_ENTER, self.onRename) 

завершается с ошибкой утверждения в Bind:

assert isinstance(event, wx.PyEventBinder) 
AssertionError 

Неудивительно, что wx.wxEVT_COMMAND_TEXT_ENTER не является экземпляром, это номер.

Я прочитал замечание об изменениях событий между Python 2 и 3 - смешивал ли библиотеки библиотеки?

ответ

1

Возможно, вы имели в виду wx.EVT_TEXT_ENTER?

>>> import wx 
>>> wx.wxEVT_COMMAND_TEXT_ENTER 
10165 
>>> wx.EVT_TEXT_ENTER 
<wx._core.PyEventBinder object at 0x000000000321C8D0> 

Пример:

import wx 

class MyWindow(wx.Frame): 
    def __init__(self): 
     wx.Frame.__init__(self, None) 
     self.fileNameInput = wx.TextCtrl (self, style=wx.TE_PROCESS_ENTER) 
     self.fileNameInput.Bind(wx.EVT_TEXT_ENTER, self.onRename) 
    def onRename(self, e): 
     print('ENTER') 

app =wx.PySimpleApp() 
win = MyWindow() 
win.Show() 
app.MainLoop() 
+0

Уч , выглядит как тупой - я попробую это позже. Глядя на документацию на 'http: // xoomer.virgilio.it/infinity77/wxPython/Widgets/wx.TextCtrl.html', я скопировал неправильную часть: он говорит:« wx.EVT_TEXT_ENTER (id, func) \t Ответьте на Событие wx.wxEVT_COMMAND_TEXT_ENTER, сгенерированное при нажатии в текстовом элементе управления (...). " – virtualnobi

+0

Идеальный удар - теперь прекрасно работает. благодаря – virtualnobi

0

В дополнение к предыдущему ответу, вот один, который работает для любого ЭВТ ... У меня была аналогичная проблема, и потребовалось некоторое время, чтобы найти точное название мероприятие. Проверка исходного кода, файл WX \ core.py имеет большинство преобразований, в моем случае:

EVT_LISTBOX_DCLICK = wx.PyEventBinder(wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, 1) 

В вашем случае в файле WX \ _controls.py:

EVT_TEXT_ENTER = wx.PyEventBinder(wxEVT_COMMAND_TEXT_ENTER, 1)