質問

文字に取り消し線を設定したい RichTextCtrlwxPython. 。しかし、次のような方法は見つかりませんでした BeginStrikethrough または SetStrikethrough.

取り消し線を適用することはできますか? RichTextCtrl?どうやって?

編集1:

Font 取り消し線フラグ付き BeginFont そして EndFont 取り消し線効果を与えない

import wx
import wx.richtext as rt

class MyFrame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, 1, 'Testing strike-through')
        rtc = rt.RichTextCtrl(self, -1)
        rtc.WriteText("normal text")
        rtc.Newline()

        font = wx.FFont(12, wx.FONTFAMILY_DEFAULT, face='Tahoma', flags=wx.FONTFLAG_STRIKETHROUGH)
        rtc.BeginFont(font)
        rtc.WriteText("This is strike-through")
        rtc.EndFont()

if __name__ == '__main__':
    app = wx.PySimpleApp()
    frame = MyFrame()
    frame.Show()
    app.MainLoop()

出力:

No strike-through in output

役に立ちましたか?

解決

enter image description here

  1. 使用できます font.SetStrikethrough(True)wxpython2.9.4 or higher, 、 参照する このリンク

  2. さもないと:使用 font.SetNativeFontInfoFromString(str) ネイティブ情報の説明を含むフラグを設定します。

違いを確認するには、次の文字列を確認してください。Windows でのみテストされています。

取り消し線なしの説明:0;-16;0;0;0;400;0;0;0;1;0;0;2;32;タホマ

取り消し線付きの説明:0;-16;0;0;0;400;0;0;1;1;0;0;2;32;タホマ

コード:

import wx
import wx.richtext as rt

class MyFrame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, 1, 'Testing strike-through')
        rtc = rt.RichTextCtrl(self, -1)
        rtc.WriteText("normal text")
        rtc.Newline()

        font = wx.FFont(12, wx.FONTFAMILY_DEFAULT, face='Tahoma', flags=wx.FONTFLAG_STRIKETHROUGH)

        info = font.GetNativeFontInfoDesc()
        info = self.setFontInfoStrikethrough(info)
        font.SetNativeFontInfoFromString(info)

        rtc.BeginFont(font)
        rtc.WriteText("This is strike-through")
        rtc.EndFont()

    def setFontInfoStrikethrough(self, info):
        print "orig:", info
        info = info.split(";")
        info[8] = r'1'
        info = ";".join(info)
        print "new :",info
        return info

if __name__ == '__main__':
    app = wx.PySimpleApp()
    frame = MyFrame()
    frame.Show()
    app.MainLoop()

他のヒント

テキスト効果を使用できます。これは wxPython 2.8.12 でも機能します。

style = rt.TextAttrEx()
style.SetFlags(rt.TEXT_ATTR_EFFECTS)
style.SetTextEffects(rt.TEXT_ATTR_EFFECT_STRIKETHROUGH)
style.SetTextEffectFlags(rt.TEXT_ATTR_EFFECT_STRIKETHROUGH)
rtc.BeginStyle(style)
rtc.WriteText("This is strike-through")
rtc.EndStyle()

(Linux でテスト済み)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top