1

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 では、ラッピング スタイルは構築時にしか指定できないとどこかで聞きました (これは私にはオプションではありません)。この場合、任意の回避策を歓迎します。

前もって感謝します

4

1 に答える 1

1

Notepad++ がテキスト エディターとして機能する方法が気に入った場合はwx.StyledTextCtrl、コアで同じ Scintilla コンポーネントを使用する を参照SetWrapModeしてください (Word ラップの設定については、を参照してください)。Scintilla ライン ラップ ドキュメント

それをテストし、すぐにラップします。

from wx.stc import StyledTextCtrl, STC_WRAP_NONE, STC_WRAP_WORD

    my_stc.SetWrapMode(STC_WRAP_WORD)
    …
    my_stc.SetWrapMode(STC_WRAP_NONE)
于 2015-01-07T17:07:51.913 に答える