wxTextCtrl - 设置文本换行运行时

时间:2015-01-07 14:11:27

标签: wxpython wxwidgets wxtextctrl

我打算为我的基于wxPython的应用程序提供一个文本换行功能选项,以便从菜单中打开和关闭(比如说notepad ++允许它)。

我有一个wxTextCtrl并在wxWidgets文档中读取,我必须使用TextCtrl :: SetStyle(wxTextAttr(my_atributes))来操作字符/段落样式,以便提供文本环绕功能。

以下是我在菜单项处理程序中的操作方法:

def OnMenuWrapLines( self, evt):
  current_style = wx.TextAttr()
  self.TextCtrl.GetStyle( 0, current_style)

  print "DBG: OnMenuWrapLines(): prev style = 0x%X" % current_style.GetFlags()

  if evt.IsChecked():
     current_style.SetFlags( current_style.GetFlags() & ~wx.TE_DONTWRAP | wx.TE_BESTWRAP)
  else:
     current_style.SetFlags( current_style.GetFlags() & ~wx.TE_BESTWRAP | wx.TE_DONTWRAP)

  print "DBG: SetStyle(0x%x)=%d" % ( current_style.GetFlags(), self.TextCtrl.SetStyle( 0, self.TextCtrl.GetNumberOfLines(), current_style))

哪个不能按预期工作 - 样式本身计算正常,但无法设置(每次输入此函数时 - 样式值相同,修改后的值不会应用)。 / p>

我听说某个地方wxMSW包装样式只能在施工时指定(这对我来说不是一个选项)。在这种情况下,欢迎使用任何解决方法。

提前致谢

1 个答案:

答案 0 :(得分:1)

如果您喜欢Notepad ++作为文本编辑器的方式,您可以查看wx.StyledTextCtrl,它在其核心使用相同的Scintilla组件(请参阅SetWrapMode设置自动换行)。 Scintilla line wrap documentation

测试它,立即包裹。

from wx.stc import StyledTextCtrl, STC_WRAP_NONE, STC_WRAP_WORD

    my_stc.SetWrapMode(STC_WRAP_WORD)
    …
    my_stc.SetWrapMode(STC_WRAP_NONE)