2

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

4

2 回答 2

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()
于 2013-12-17T15:43:48.877 回答
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)
于 2016-02-01T14:18:45.350 回答