python - Mac上wx.TextCtrl中的Enter键没有效果

标签 python macos wxpython wxwidgets

当我在 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 (Yosemite),使用 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))

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

关于python - Mac上wx.TextCtrl中的Enter键没有效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27610796/

相关文章:

python - 比较跨实例安装的 Jenkins 插件

macos - 如何从 mac 终端将参数传递给包安装程序

c - Ubuntu 中计算工作负载的性能令人失望

python - 如何从 Python 制作 .deb 文件

python - wxpython-plotting 中的 Matplotlib 中止

python - Django - 将模板上下文传递给表单

python - 添加额外的行到数据框,其中日期是索引

mysql - 无法使用主机名通配符连接到 MySQL

wxpython - wx小部件/wxPython : Resizing a wxFrame while keeping aspect ratio

python - 使用 yfinance 的 Assets 负债表没有像雅虎财经那样的 'Total Debt'