微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

RichTextCtrl根据光标位置更改样式

如何解决RichTextCtrl根据光标位置更改样式

我在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',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))
        self.richTextCtrl.WriteText("abcd")
        self.richTextCtrl.EndTextColour()
        self.richTextCtrl.Newline()
        self.richTextCtrl.BeginTextColour((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。

解决方法

您正在从单击位置继承<TextView android:id="@+id/name" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginStart="16dp" android:layout_marginLeft="16dp" android:layout_marginTop="8dp" android:ellipsize="end" android:lines="1" android:maxLines="1" android:text="Nameeeeeeeeeeeeeeeeeeeee" android:textSize="20sp" app:layout_constraintEnd_toStartOf="@id/ageName" app:layout_constraintStart_toEndOf="@+id/photo" app:layout_constraintTop_toTopOf="parent" />
除非更改,否则样式仍然有效。
要解决您的问题,请在清除文本后重置样式,即

wx.TextAttr

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。