wxPython RichTextCtrl с зачеркиванием

Я хочу установить текст с зачеркиванием в 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()

Выход:

Отсутствие зачистки на выходе

1 ответ

Решение

введите описание изображения здесь

  1. Ты можешь использовать font.SetStrikethrough(True) с 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; 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()

Вы можете использовать текстовый эффект, он работает и с 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)

Другие вопросы по тегам