我想在 RichTextCtrlwxPython 中设置带有删除线的文本。但找不到任何方法,如 BeginStrikethroughSetStrikethrough

是否可以在 RichTextCtrl 中应用删除线?如何?

编辑 1:

带有删除线标志的 FontBeginFontEndFont 一起使用,但不提供删除线效果

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 ,引用 This Link
  • 否则:使用 font.SetNativeFontInfoFromString(str) 设置带有 native 信息描述的标志。

  • 请检查以下字符串以查看差异,仅在 Windows 中测试:

    desc 不带删除线:0;-16;0;0;0;400;0;0; 0 ;1;0;0;2;32;Tahoma

    带删除线的 desc: 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()
    

    关于python - wxPython RichTextCtrl 带删除线,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22074496/

    10-12 21:53