我想在 RichTextCtrl
的 wxPython
中设置带有删除线的文本。但找不到任何方法,如 BeginStrikethrough
或 SetStrikethrough
。
是否可以在 RichTextCtrl
中应用删除线?如何?
编辑 1:
带有删除线标志的 Font
与 BeginFont
和 EndFont
一起使用,但不提供删除线效果
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/