改变一个Kivy widge文本的一部分颜色

2024-04-25 23:20:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图编写一个程序,如果我按下一个按钮,标签小部件文本的一部分颜色会改变。在

例如,有一个标签小部件,文本为“1/0”。现在,如果我按下按钮,1的颜色会变为指定的颜色。这是我尝试过的程序:

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
from kivy.lang import Builder
from kivy.utils import get_color_from_hex

Builder.load_string('''
#: import get_color_from_hex kivy.utils.get_color_from_hex
<b>:
    orientation: 'horizontal'
    Button:
        text: 'Press Me'
        on_press: num.text[0].color = get_color_from_hex('#04d3ff')

    Label:
        id: num
        text: '1/0'
''')

class b(BoxLayout):
    pass

class main(App):
    def build(self):
        return b()

if __name__ == "__main__":
    main().run()

我得到的错误是:

^{pr2}$

编辑:解决方案

这个编辑是为那些碰巧遇到类似情况,并从谷歌搜索到这里的人。恶劣的解决方案非常有效。这是kv语言的解决方案代码:

<b>:
    orientation: 'horizontal'
    Button:
        text: 'Press Me'
        on_press: num.text = "[color=#04d3ff]1[/color]/0"
        on_release: num.text = "[color=#ffffff]1[/color]/0"

    Label:
        id: num
        markup: True
        text: '1/0'

Tags: textfromimport程序get颜色mainon
2条回答

对于你评论中的第二个问题,你问“我现在遇到了另一个问题。:\如果有多个标签怎么办?如果要同时更改多个标签的第一个字符,该怎么办?”你应该提出一个新问题,并提供一些代码。在

但是,乍一看,您似乎可以简单地遍历标签并执行以下操作:

  1. 获取标签的当前文本(标签.text)

  2. 通过对第一个字符使用标记更新标签颜色。例如,如果标签.text=“my_text”,我可以通过在标签内更新以下内容来突出显示标签文本的“m”:

    text = '[color=FFFF00]'+label.text[0]+'[/color]'+label.text[1:]
    

这个答案假设您有一组现有的标签,并且您希望修改每个标签的第一个字符。没有代码,很难给出一个更具体的答案,但这种通用的方法是可行的。在

使用Kivy的basic markup syntax设置颜色,同时在标签中使用markup: True。在

相关问题 更多 >

    热门问题