【问题标题】:Enter key in wx.TextCtrl on Mac has no effectMac 上 wx.TextCtrl 中的 Enter 键无效
【发布时间】:2015-02-21 00:44:27
【问题描述】:

当我在 Mac OS X Yosemite 上运行下面的程序时,在 TextCtrl 中按下回车键对 TextCtrl 的内容根本没有任何影响(我需要它在文本中输入换行符)。

添加或删除 TE_PROCESS_ENTER 样式根本没有任何效果; EVT_TEXT_ENTER 事件不会被触发。顺便说一下,按下回车键确实会触发带有键码 13 的 EVT_KEY_UP 事件。

奇怪的是,按 Ctrl+Enter 确实会在 TextCtrl 中输入换行符,但它也不会触发 EVT_TEXT_ENTER 事件。

这里发生了什么?当然我可以解决这个问题并检测 keycode 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。

【问题讨论】:

    标签: python macos wxpython wxwidgets


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多