0

wxrichtextctrl を使用して小さなアプリを開発しています。フォント関数が予期しない動作をしています。以下はフォント関数です。

    def OnFont(self,event):
      if not self.display.HasSelection():
          return
      r = self.display.GetSelectionRange()
      fontData = wx.FontData()
      fontData.EnableEffects(False)
      attr = wx.richtext.RichTextAttr()
      attr.SetFlags(wx.TEXT_ATTR_FONT)
      dlg = wx.FontDialog(self, fontData)
      if dlg.ShowModal() == wx.ID_OK:
        fontData = dlg.GetFontData()
        font = fontData.GetChosenFont()
        color=fontData.GetChosenColor()
        if font:
            attr.SetFlags(wx.TEXT_ATTR_FONT)
            attr.SetFont(font)
            self.display.SetStyle(r, attr)
      dlg.Destroy()

これに関する問題は、選択したテキストに下線が引かれていて、フォントが設定されている場合、下線が削除されることです。テキストの太さ、下線、イタリック体を変更するのではなく、ダイアログで現在のフォントのみを変更する方法はありますか? または、これは richtextformatting ダイアログで可能です。または、fontdialog を変更して、選択したフォントとサイズのオプションのみを表示し、選択したテキストを変更することは可能ですか。誰かが良いサンプル ドキュメントを指摘できますか。

更新: ダイアログに定義済みのフォントを設定することはできますが、問題は選択したテキストのフォント値を取得することです。私がしようとしているのは、選択範囲の最初の文字のスタイルを取得し、下線、フォント、太字、斜体、サイズなどのフォント ダイアログに設定することです。以下は、私がやろうとしているコードです。

    attr = wx.richtext.RichTextAttr()
    attr.SetFlags(wx.TEXT_ATTR_FONT)
    fontofselection=self.richtextctrl.GetStyle(1,attr)#this works without errors 
    fontData.SetInitialFont(fontofselection)#this generates above mentioned error. probably because getstyle is not getting font object type. Is there another method to get font of a character at particular position. 
4

1 に答える 1

1

デフォルトの FontDialog を使用して特定のフィールドを無効/有効にできるかどうかはわかりません。そのまま届きます。ただし、特定の値に事前設定したり、特定の値を無視したりすることができます。

dataこれを行うには、引数をダイアログ コンストラクターに渡すことができます。FontData オブジェクトを自分で構築し、それをダイアログに渡す必要があります。このサンプル コードは、Mouse vs. Pythonブログから引用したものです。

data = wx.FontData()
data.EnableEffects(True)
data.SetColour(self.curClr)         # set colour
data.SetInitialFont(self.curFont)

dlg = wx.FontDialog(self, data)

より完全な例については、記事を確認してください。また、FontDataオブジェクトのドキュメントを参照して、その作成方法と操作方法を確認してください。

または、使いにくいダイアログ (IMO)の FontEnumeratorを使用することもできます。また、同じブログに別の素晴らしい例があります。また、必要なすべてのフォントやその他のパラメーターのリストを取得して、独自のものにすることもできますDialog

アップデート

特定の位置にあるテキストから正しいデータを取得するには、GetStyleまたはを使用する必要GetStyleForRangeがありますが、使い方が間違っています。Trueドキュメントを読むと、これらが成功またはFalse失敗のいずれかを返し、結果を取得するには を使用する必要があることに気付くでしょうattr。例えば:

attr = wx.richtext.RichTextAttr()
attr.SetFlags(wx.TEXT_ATTR_FONT)
success=self.richtextctrl.GetStyle(1,attr)
fontData.SetInitialFont(attr.GetFont()) # And extract any other information from there

これはテストされていませんが、期待どおりに動作するはずです。

そこから何を抽出できるかについては、ドキュメントを確認してください。RichTextAttr下線/太字/斜体はすべて Font オブジェクトにあると思います: check GetUnderlinedGetWeightおよびGetStyle(それぞれのセッターを使用)。

常にドキュメントを確認してください。1時間もかからずに答えが見つかります:)

于 2012-12-31T17:47:55.800 に答える