【问题标题】:wxTextCtrl - set text wrapping runtimewxTextCtrl - 设置文本换行运行时
【发布时间】:2015-03-05 10:59:36
【问题描述】:

我打算为我的基于 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))

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

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

提前致谢

【问题讨论】:

  • 我检查了 wx 文档:“请注意,对齐样式​​(wxTE_LEFT、wxTE_CENTRE 和 wxTE_RIGHT)可以在 wxMSW 和 wxGTK 上创建控件后动态更改。wxTE_READONLY、wxTE_PASSWORD 和环绕样式可以在 wxGTK 下动态更改但不是 wxMSW。其他样式只能在控件创建期间设置。 see at the end of section styles
  • @nepix32:是的——我也看到了,但希望有某种解决方法。无论如何,谢谢。

标签: wxpython wxwidgets wxtextctrl


【解决方案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)

【讨论】:

  • 谢谢好点。如果没有其他解决方案出现,我会选择 wx.StyledTextCtr。
猜你喜欢
  • 2013-05-17
  • 1970-01-01
  • 2018-02-06
  • 2015-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-18
相关资源
最近更新 更多