我打算为我的基于 wxPython 的应用程序提供一个文本换行功能选项,以便从菜单中打开和关闭(例如,说记事本++允许它)。
我有一个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 包装样式只能在施工时指定(这对我来说不是一个选项)。在这种情况下,欢迎任何解决方法。
提前致谢
如果你喜欢Notepad++作为文本编辑器的方式,你可以看看wx.StyledTextCtrl
,它的核心使用相同的Scintilla组件(请参阅SetWrapMode
设置自动换行)。闪烁换行文档。
测试了一下,立即包装。
from wx.stc import StyledTextCtrl, STC_WRAP_NONE, STC_WRAP_WORD
my_stc.SetWrapMode(STC_WRAP_WORD)
…
my_stc.SetWrapMode(STC_WRAP_NONE)