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