当我在Mac OS X Yosemite上运行以下程序时,在TextCtrl内按Enter键完全不会对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(优胜美地)上,使用python 2.7.9(通过自制程序)和wxPython 3.0.2.0。

最佳答案

问题出在对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))


文本控件未初始化为多行控件。

08-18 15:19