首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于光标位置的RichTextCtrl更改样式

基于光标位置的RichTextCtrl更改样式
EN

Stack Overflow用户
提问于 2020-09-18 11:43:57
回答 1查看 127关注 0票数 1

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

我举了一个小例子,显示了同样的行为:

代码语言:javascript
运行
复制
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,并添加几行带有各种样式选项的文本。单击红色文本行,然后单击update按钮,将在控件中以红色写入所有内容,而不是在Begin/EndTextColour之间。同样的事情,行与粗体文本,选择它,然后点击按钮将所有的文本以粗体。

我不确定我是否没有以正确的方式使用richtextctrl,或者我是否找到了一个bug。

我尝试在Windows1064位上使用wxPython 4.0.4 +Python3.7.5和wxPython 4.1.0 +Python3.8.5。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-19 10:06:08

您正在从要单击的位置继承wx.TextAttr

除非改变,否则这种风格仍然有效。

若要解决问题,请在清除文本后重置样式,即

代码语言:javascript
运行
复制
def buttonPressed(self, event):
    self.richTextCtrl.Clear()
    self.richTextCtrl.SetDefaultStyle(wx.TextAttr()) # add this line
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63955144

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档