wxPython RichTextCtrl 带删除线
Posted
技术标签:
【中文标题】wxPython RichTextCtrl 带删除线【英文标题】:wxPython RichTextCtrl with strikethrough 【发布时间】:2014-03-31 05:38:57 【问题描述】:我想在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()
输出:
【问题讨论】:
我没有看到那个函数,但它确实有一个BeginFont
函数,所以你可以创建一个带删除线的字体,然后这样使用它。
嗨@CorleyBrigman,我尝试了BeginFont
和EndFont
,但没有给出删除效果。请参阅有问题的EDIT 1。
我自己并没有真正使用过,但看起来下面还有另一个答案。
是的@CorleyBrigman,它为我工作了 100% :)
【参考方案1】:
你可以使用font.SetStrikethrough(True)
和wxpython2.9.4 or higher
,参考This Link
否则:使用font.SetNativeFontInfoFromString(str)
设置带有原生信息描述的标志。
请检查以下字符串以查看差异,仅在 windows 中测试:
无删除线的描述:0;-16;0;0;0;400;0;0;0
;1;0;0;2;32;Tahoma
带删除线的描述: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()
【讨论】:
Thnx @Jerry_Y,您提供的 otherwise 方法对我来说效果很好。我正在使用 wxPython2.8,所以它很棒,我不需要升级到 2.9 或更高版本.. thnx 再次:)【参考方案2】:您可以使用文本效果,这也适用于 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 上测试)
【讨论】:
以上是关于wxPython RichTextCtrl 带删除线的主要内容,如果未能解决你的问题,请参考以下文章