【问题标题】:RichTextCtrl changing style based on cursor positionRichTextCtrl 根据光标位置改变样式
【发布时间】:2020-09-18 11:43:57
【问题描述】:

我对 wx.richtext.RichTextCtrl 有一个奇怪的行为。我有一个面板,其中包含一个只读 RichTextCtrl,其中包含一些有关对象的文本信息和一个在单击时更新内容的按钮。根据用户将光标放在 RichTextCtrl 上的位置,未使用 BeginTextColour/EndTextColour(或 BeginBold/EndBold)格式化的每一位文本都会改变字体样式和颜色。

我做了一个显示相同行为的小例子:

import wx
import wx.richtext

class MyFrame(wx.Frame):    
    def __init__(self):
        super().__init__(parent=None, title='RichTextCtrl')
        panel = wx.Panel(self)

        self.richTextCtrl = wx.richtext.RichTextCtrl(panel, pos=(5, 5), size=wx.Size(150, 100))
        self.button = wx.Button(panel, label='Update', pos=(5, 110))
        self.button.Bind(wx.EVT_BUTTON, self.buttonPressed)

        self.Show()
        
    def buttonPressed(self, event):
        self.richTextCtrl.Clear()
        self.richTextCtrl.BeginBold()
        self.richTextCtrl.WriteText("abcd")
        self.richTextCtrl.EndBold()
        self.richTextCtrl.Newline()
        self.richTextCtrl.WriteText("abcd")
        self.richTextCtrl.Newline()
        self.richTextCtrl.BeginTextColour((255, 0, 0))
        self.richTextCtrl.WriteText("abcd")
        self.richTextCtrl.EndTextColour()
        self.richTextCtrl.Newline()
        self.richTextCtrl.BeginTextColour((0, 0, 0))
        self.richTextCtrl.WriteText("abcd")
        self.richTextCtrl.EndTextColour()

if __name__ == '__main__':
    app = wx.App()
    frame = MyFrame()
    app.MainLoop()

这将显示一个带有richtextctrl 和一个按钮的窗口。单击该按钮将清除richtextctrl 并添加几行具有各种样式选项的文本。单击红色的文本行,然后单击更新按钮会将控件中的所有内容写入红色,而不是 Begin/EndTextColour 之间。与加粗文本的行相同,选择它然后单击按钮将使所有文本变为粗体。

我不确定我是否没有以正确的方式使用richtextctrl,或者我是否发现了一个错误。

我尝试在 Windows 10 64 位上使用 wxPython 4.0.4 + Python 3.7.5 和 wxPython 4.1.0 + Python 3.8.5。

【问题讨论】:

    标签: wxpython richtextctrl


    【解决方案1】:

    您正在从您单击的位置继承wx.TextAttr
    除非更改,否则该样式仍然有效。
    要解决您的问题,请在清除文本后重置样式,即

    def buttonPressed(self, event):
        self.richTextCtrl.Clear()
        self.richTextCtrl.SetDefaultStyle(wx.TextAttr()) # add this line
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-04
      • 1970-01-01
      • 2012-03-23
      • 1970-01-01
      • 2015-05-29
      • 2018-07-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多