python - wxPython RichTextCtrl 带删除线

标签 python wxpython strikethrough richtextctrl

我想在 wxPythonRichTextCtrl 中设置带删除线的文本。但是找不到任何方法,例如 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()

输出:

No strike-through in output

最佳答案

enter image description here

  1. 您可以在 wxpython2.9.4 或更高版本 中使用 font.SetStrikethrough(True),引用 This Link

  2. 否则:使用 font.SetNativeFontInfoFromString(str) 设置带有 Native 信息描述的标志。

请检查以下字符串以查看差异,仅在 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()

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

相关文章:

python - 使 wxPython TextCtrl 响应 cr 或 tab

python - wxformbuilder python 生成的代码抛出 NameError

python - GenButton对齐wxpython

ios - 我希望我的文本在空白处延伸

html - 更改删除线的垂直位置?

python - 使用坐标在图像上重叠图形

python - 如何删除多个字符串中的最后一个字符?

google-sheets - SUMIF 不带删除线

python - angularjs 最快/最简单的后端?

python - 从 VBA 到 Flask 的 HTTP 请求的编码问题