2013-12-17 47 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响应在文本控件(...)中按下Enter时生成的wx.wxEVT_COMMAND_TEXT_ENTER事件“。 – virtualnobi

+0

完美打击 - 现在很好用。谢谢 – virtualnobi

0

补充到以前的答案,这里是一个对任何EVT工作......我也有类似的问题,并采取了一些时间来找到的确切名称事件。检查源代码,文件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)