2016-04-16 26 views
0

ボタンを押すと、ラベルウィジェットのテキストの一部の色が変わるプログラムを作成しようとしています。Kivyウィジェットの一部のテキストの色を変更する

たとえば、テキスト「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() 

そして、これは私が取得エラーです:

Traceback (most recent call last): 
    File "b.py", line 28, in <module> 
    main().run() 
    File "/usr/lib/python2.7/dist-packages/kivy/app.py", line 828, in run 
    runTouchApp() 
    File "/usr/lib/python2.7/dist-packages/kivy/base.py", line 487, in runTouchApp 
    EventLoop.window.mainloop() 
    File "/usr/lib/python2.7/dist-packages/kivy/core/window/window_sdl2.py", line 619, in mainloop 
    self._mainloop() 
    File "/usr/lib/python2.7/dist-packages/kivy/core/window/window_sdl2.py", line 362, in _mainloop 
    EventLoop.idle() 
    File "/usr/lib/python2.7/dist-packages/kivy/base.py", line 330, in idle 
    self.dispatch_input() 
    File "/usr/lib/python2.7/dist-packages/kivy/base.py", line 315, in dispatch_input 
    post_dispatch_input(*pop(0)) 
    File "/usr/lib/python2.7/dist-packages/kivy/base.py", line 221, in post_dispatch_input 
    listener.dispatch('on_motion', etype, me) 
    File "kivy/_event.pyx", line 718, in kivy._event.EventDispatcher.dispatch (kivy/_event.c:7699) 
    File "/usr/lib/python2.7/dist-packages/kivy/core/window/__init__.py", line 1030, in on_motion 
    self.dispatch('on_touch_down', me) 
    File "kivy/_event.pyx", line 718, in kivy._event.EventDispatcher.dispatch (kivy/_event.c:7699) 
    File "/usr/lib/python2.7/dist-packages/kivy/core/window/__init__.py", line 1046, in on_touch_down 
    if w.dispatch('on_touch_down', touch): 
    File "kivy/_event.pyx", line 718, in kivy._event.EventDispatcher.dispatch (kivy/_event.c:7699) 
    File "/usr/lib/python2.7/dist-packages/kivy/uix/widget.py", line 432, in on_touch_down 
    if child.dispatch('on_touch_down', touch): 
    File "kivy/_event.pyx", line 718, in kivy._event.EventDispatcher.dispatch (kivy/_event.c:7699) 
    File "/usr/lib/python2.7/dist-packages/kivy/uix/behaviors/button.py", line 110, in on_touch_down 
    self.dispatch('on_press') 
    File "kivy/_event.pyx", line 714, in kivy._event.EventDispatcher.dispatch (kivy/_event.c:7654) 
    File "kivy/_event.pyx", line 1224, in kivy._event.EventObservers.dispatch (kivy/_event.c:13497) 
    File "kivy/_event.pyx", line 1108, in kivy._event.EventObservers._dispatch (kivy/_event.c:12329) 
    File "/usr/lib/python2.7/dist-packages/kivy/lang.py", line 1557, in custom_callback 
    exec(__kvlang__.co_value, idmap) 
    File "<string>", line 7, in <module> 
AttributeError: 'str' object has no attribute 'color' 

EDIT:SOLUTION

は、この編集は、類似したに実行するために起こる人のためのものですGoogle検索からここに上陸します。 Inclementのソリューションは完全に機能しました。これは、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' 

答えて

1

使用Kivyのラベルでmarkup: Trueと一緒に、色を設定するmarkup syntax基本。

+0

もう別の問題が発生しました。 :\複数のラベルがある場合はどうなりますか?複数のラベルの最初の文字を一緒に変更したい場合はどうすればよいですか? –

0

あなたのコメントに2番目の質問があります。「別の問題が発生しました:\複数のラベルがある場合、複数のラベルの最初の文字を一緒に変更したい場合はどうすればよいですか?あなたは新しい質問を開き、いくつかのコードを提供する必要があります。

  1. は、ラベルの現在のテキストを取得し(label.text)

  2. 更新:

    は、しかし、一見あなたがラベルを通して単にループは、以下を行うことができように見えますラベルの色は、最初の文字にマークアップを使用します。 label.text =「my_text」は、私が更新を経由してラベルテキストの「M」を強調することができれば、たとえば、ラベルの内側に次

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

この答えは、あなたがのセットを持っていることを前提としてい既存のラベルを変更し、それぞれの最初の文字を変更したいとします。コードなしでは、より具体的な答えを出すのは難しいですが、この一般的なアプローチが有効です。

関連する問題