我想在RichTextCtrl
的{{1}}中设置带有删除线的文字。但找不到任何方法,例如wxPython
或BeginStrikethrough
。
是否可以在SetStrikethrough
中应用删除?怎么样?
编辑1:
带有删除标记的{p>RichTextCtrl
与Font
和BeginFont
一起使用不会产生删除效果
EndFont
输出:
答案 0 :(得分:3)
您可以将font.SetStrikethrough(True)
与wxpython2.9.4 or higher
一起使用,参考This Link
否则:使用font.SetNativeFontInfoFromString(str)
设置包含原生信息说明的标记。
请检查以下字符串以查看差异,仅在Windows中测试:
没有删除线的desc:0; -16; 0; 0; 0; 400; 0; 0; 0
; 1; 0; 0; 2; 32; Tahoma
desc with Strikethrough:0; -16; 0; 0; 0; 400; 0; 0; 1
; 1; 0; 0; 2; 32; Tahoma
代码:
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()
答案 1 :(得分:0)
您可以使用文本效果,这也适用于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上测试)