当我在Mac OS X Yosemite上运行下面的程序时,按下TextCtrl中的回车键对TextCtrl的内容完全没有任何影响(我需要它在文本中输入换行符)。
添加或删除TE_PROCESS_ENTER样式根本没有任何效果; EVT_TEXT_ENTER事件不会被触发。顺便说一句,按Enter键会触发带键码13的EVT_KEY_UP事件。
奇怪的是,按Ctrl + Enter会导致在TextCtrl中输入换行符,但它也不会触发EVT_TEXT_ENTER事件。
这里发生了什么?当然,我可以解决这个问题并检测键码13,但当然这并没有真正解决问题。
#!/usr/bin/env pythonw
import wx
class MainWindow(wx.Frame):
def __init__(self, title):
wx.Frame.__init__(self, None, title=title, size=(500,500))
self.tc = wx.TextCtrl(self, wx.TE_MULTILINE|wx.TE_PROCESS_ENTER, size=(200,100))
self.tc.Bind(wx.EVT_KEY_UP, self.OnKeyUp, self.tc)
self.tc.Bind(wx.EVT_TEXT_ENTER, self.OnEnter, self.tc)
self.Show(True)
def OnKeyUp(self, event):
print event.GetKeyCode()
def OnEnter(self, event):
# Never gets called
print "enter!"
if __name__ == '__main__':
app = wx.App()
frame = MainWindow('Test')
app.MainLoop()
我在Mac OS X(Yosemite)上,使用python 2.7.9(通过自制程序)和wxPython 3.0.2.0。
答案 0 :(得分:2)
问题在于对wxTextCtrl构造函数的调用;标志没有正确传递。
self.tc = wx.TextCtrl(self, wx.TE_MULTILINE|wx.TE_PROCESS_ENTER, size=(200,100))
应该是
self.tc = wx.TextCtrl(self, style=wx.TE_MULTILINE|wx.TE_PROCESS_ENTER, size=(200,100))
文本控件未初始化为多行控件。