wxPython TextCtrl断言错误:wx.wxEVT_COMMAND_TEXT_ENTER不是PyEventBinder实例

时间:2013-12-17 15:28:46

标签: python wxpython assertions textctrl

尝试让wxPython TextCtrl对ENTER作出反应,我得到一个断言错误:

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之间事件变化的评论 - 我是否混合了库的版本?

2 个答案:

答案 0 :(得分: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()

答案 1 :(得分: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)