带有删除线的wxPython RichTextCtrl

时间:2014-02-27 16:28:42

标签: python wxpython strikethrough richtextctrl

我想在RichTextCtrl的{​​{1}}中设置带有删除线的文字。但找不到任何方法,例如wxPythonBeginStrikethrough

是否可以在SetStrikethrough中应用删除?怎么样?

编辑1:

带有删除标记的{p> RichTextCtrlFontBeginFont一起使用不会产生删除效果

EndFont

输出:

No strike-through in output

2 个答案:

答案 0 :(得分:3)

enter image description here

  1. 您可以将font.SetStrikethrough(True)wxpython2.9.4 or higher一起使用,参考This Link

  2. 否则:使用font.SetNativeFontInfoFromString(str)设置包含原生信息说明的标记。

  3. 请检查以下字符串以查看差异,仅在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上测试)