【问题标题】:KIVY: How to change label colour?KIVY:如何改变标签颜色?
【发布时间】:2021-09-17 06:54:32
【问题描述】:

我的 for 循环在滚动视图中创建一个简单的标签列表,而不是更改 python 文件中的字体大小和颜色,我宁愿在我的 KV 文件中自定义标签。这可能吗?

我知道我可以使用 ids 来引用 KV 文件中的标签,但我无法在这里弄清楚如何做。

如果我在我的 python 文件中创建标签,是在我的 kv 文件中自定义还是继续在 python 文件中自定义它是一种好习惯。解决此问题的最佳方法是什么?

*.py

import kivy
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.properties import ObjectProperty
from kivy.properties import StringProperty
from kivy.uix.label import Label
from kivy.uix.gridlayout import GridLayout
from kivy.uix.scrollview import ScrollView
from kivy.lang import Builder
from kivymd.app import MDApp
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.clock import Clock
from kivy.uix.button import Button
from kivy.core.window import Window

class FirstWindow(Screen):
    def __init__(self, **kwargs):
        super(FirstWindow, self).__init__(**kwargs)
        Clock.schedule_once(self.create_scrollview)

    def create_scrollview(self, dt):
        list1 = ['1','2','3','4','5','6','7','8','9','10','11','12']
        layout = GridLayout(cols=1, spacing=10, size_hint_y=None)
        layout.bind(minimum_height=layout.setter("height"))

        for x in list1:
            l = Label(text=x, size=(10, 50), size_hint=(1, None)) <----- Change the font colour in my kv file
            layout.add_widget(l)

        scrollview = ScrollView(size_hint=(1, None), size=(Window.width, Window.height))
        self.view.add_widget(scrollview)
        scrollview.add_widget(layout)
        

class WindowManager(ScreenManager):
    pass

kv = Builder.load_file('NearMe.kv')

class NearMeApp(App):
    def build(self):
        return kv

*.kv

WindowManager:
    FirstWindow:

<FirstWindow>:
    view: view
    BoxLayout:
        orientation: 'vertical'

        BoxLayout:
            size: (64, 64)
            size_hint: (1, None)

            Label:
                text: "NearMeApplications"
                canvas.before:
                    Color:
                        rgba: .5, .5, .5, 1
                    Line:
                        width: 2
                        rectangle: self.x, self.y, self.width, self.height

        ScrollView:
            id: view
            canvas.before:
                Color:
                    rgba: .8, .8, .8, 1
                Line:
                    width: 2
                    rectangle: self.x, self.y, self.width, self.height
                  

【问题讨论】:

    标签: python kivy kivy-language


    【解决方案1】:

    您可以像这样定义自己的自定义Label

    def MyLabel(Label):
        pass
    

    然后在您的kv 中为MyLabel 制定规则:

    <MyLabel>:
        color: 1,0,0,1
        size: 10, 50
        size_hint: 1, None
    

    在你的循环中:

        for x in list1:
            l = MyLabel(text=x) <----- Change the font colour in my kv file
            layout.add_widget(l)
    

    【讨论】:

      【解决方案2】:

      如果我错了,请纠正我,但无法从 .kv 文件设置在 python 文件中初始化的任何小部件的值,因为它仅在加载整个 .kv 文件后添加,这很可能会导致错误。虽然您仍然可以在 python 文件中编辑颜色,但这需要将 id 添加到单个标签中,如下所示:

      for x in list1:
          l = Label(id=x, text=x, size=(10, 50), size_hint=(1, None)) #ids from the list1 list
          layout.add_widget(l)
      

      【讨论】:

      • 但是我已经为我的滚动视图添加了一个 id
      【解决方案3】:

      您只需添加color: r,g,b,a

      Label:
          text: "NearMeApplications"
          color: 1,0,1,1
      

      【讨论】:

      • 是的,我知道该怎么做。我已经在解释中明确说明了我想要更改的内容。我的 for 循环中有一个标签,我想在我的 kv 文件中更改该标签的字体颜色。
      【解决方案4】:
      class MyTestApp(App):
              def build(self):
                  return Button(text="HELLO", color=(0, 0, 5, 1), background_color=(7, 4, 5, 1), font_size=150)
      
      
      if __name__ == "__main__":
          MyTestApp().run()
      

      【讨论】:

      • 但是我可以在我的示例中给它一个 id 并在 kv 文件中更改颜色吗?
      猜你喜欢
      • 2017-03-28
      • 2023-04-02
      • 1970-01-01
      • 2021-04-11
      • 2019-11-26
      • 1970-01-01
      • 1970-01-01
      • 2015-08-13
      相关资源
      最近更新 更多