Python用のKivy言語でさまざまなオブジェクト(この例ではラベル)の背景色を定義するのに問題があります。添付のコードは、各ボックスが特定の背景色を持つボックスレイアウトを作成します。
ForeignLanguage = ColoredLabel(..., size = (a,b))
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.label import Label
from kivy.properties import ListProperty
from kivy.lang import Builder
from kivy.core.window import Window
kv = '''
<ColoredLabel>:
size: (self.size_x,self.size_y)
pos: (0,0) # no effect
background_color:
canvas.before:
Color:
rgba: self.background_color
Rectangle:
pos: self.pos
size: (self.size_x,self.size_y)
'''
Builder.load_string(kv)
class ColoredLabel(Label):
background_color = ListProperty((0,0,0,1))
s_global = Window.size
size_x = s_global[0]
size_y = s_global[1]/3
class MyWidget(BoxLayout):
#init
def __init__(self, **kwargs):
super().__init__(**kwargs)
ForeignLanguage = ColoredLabel(text="ForeignLanguage", size_hint=(None, None), background_color=(0/255,171/255,169/255, 1))
Translation = ColoredLabel(text="Translation", size_hint=(None, None), background_color=(45/255,137/255,239/255, 1))
Example = ColoredLabel(text="Example", size_hint=(None, None), background_color=(43/255,87/255,151/255, 1))
verticalBox = BoxLayout(orientation='vertical')
verticalBox.add_widget(ForeignLanguage)
verticalBox.add_widget(Translation)
verticalBox.add_widget(Example)
self.add_widget(verticalBox)
class BoxLayoutDemo(App):
def build(self):
return MyWidget()
if __name__ == '__main__':
BoxLayoutDemo().run()
ハードコーディングするのではなく、変数を介して特定のラベルのサイズを定義できるように、このコードをどのように適合させることができますか。次のような解決策を考え出すことができれば、最善の方法です。
ForeignLanguage = ColoredLabel(..., size = (a,b))
kvファイルに次のデザインを含めるだけです。ラベルウィジェットの継承を使用すると、定義されたすべての属性は、例えば利用できるようになりますsize
、size_hint
、color
、markup
など
<ColoredLabel>:
canvas.before:
Color:
rgba: root.background_color
Rectangle:
pos: self.pos
size: self.size
私のコードは私にはかなり複雑に見えます。Label(...、background_color =(1,1,1,1))のように、より簡単な方法でラベルの背景色を設定することは可能ですか?
あなたのコードはうまく見えました。
ForeignLanguage = ColoredLabel(text="ForeignLanguage", size_hint=(None, None), size=(300, 40),
background_color=(1, 0, 0, 1))
Translation = ColoredLabel(text="Translation", size_hint=(None, None), size=(100, 30),
background_color=(0, 1, 0, 1))
Example = ColoredLabel(text="Example", size_hint=(None, None), size=(200, 20),
background_color=(0, 0, 1, 1))
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加