3

我想在 of 中设置带有删除线的RichTextCtrl文本wxPython。但是找不到像BeginStrikethroughor这样的方法SetStrikethrough

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

编辑1:

Font带有删除线标志,用于BeginFontEndFont不提供删除线效果

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()

输出:

输出中没有删除线

4

2 回答 2

4

在此处输入图像描述

  1. 您可以使用font.SetStrikethrough(True)with wxpython2.9.4 or higher,请参阅此链接

  2. 否则:使用font.SetNativeFontInfoFromString(str)本机信息描述设置标志。

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

desc 没有删除线:0;-16;0;0;0;400;0;0; 0;1;0;0;2;32;塔霍马

desc 带删除线: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()
于 2014-02-28T09:15:43.540 回答
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 上测试)

于 2019-09-17T14:13:59.993 回答