wxPython RichTextCtrl 取り消し線付き
-
23-12-2019 - |
質問
文字に取り消し線を設定したい RichTextCtrl
の wxPython
. 。しかし、次のような方法は見つかりませんでした 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()
出力:
解決
使用できます
font.SetStrikethrough(True)
とwxpython2.9.4 or higher
, 、 参照する このリンクさもないと:使用
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 でテスト済み)
所属していません StackOverflow