【问题标题】:wxPython TextCtrl assertion error: wx.wxEVT_COMMAND_TEXT_ENTER not a PyEventBinder instancewxPython TextCtrl 断言错误:wx.wxEVT_COMMAND_TEXT_ENTER 不是 PyEventBinder 实例
【发布时间】:2013-12-17 15:28:45
【问题描述】:

试图让 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 之间事件更改的评论 - 我是否混合了库版本?

【问题讨论】:

    标签: python wxpython assertions textctrl


    【解决方案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()
    

    【讨论】:

    • 哎呀,看起来像个笨蛋——我稍后再试试。查看http://xoomer.virgilio.it/infinity77/wxPython/Widgets/wx.TextCtrl.html 的文档,我复制了错误的部分:它说“wx.EVT_TEXT_ENTER(id, func) 响应 wx.wxEVT_COMMAND_TEXT_ENTER 事件,在文本控件中按下回车时生成 (...)。”
    【解决方案2】:

    作为上一个答案的补充,这里有一个适用于任何 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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      • 2013-08-31
      • 1970-01-01
      • 1970-01-01
      • 2013-05-10
      相关资源
      最近更新 更多