【问题标题】:python/kivy : Make a Label Bold in kivypython/kivy : 在 kivy 中创建一个加粗的标签
【发布时间】:2018-03-08 07:44:25
【问题描述】:

当我在数组中传递空白值时

arr = ({'Item1': ''},{'Item2': 1000})

然后它显示 0 而不是空白值。
1.谁能告诉我如何默认设置空白而不是0?
2. key(Item1)如何加粗?

main.py

from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import Screen

def convert_data(data):
    l = []
    for item in data:
        for key, value in item.items():
            l.append({'text': key, 'value': value})
    return l

class Invoice(Screen):
    def abc(self):
        #fetching from database
        arr = ({'Item1': ''},{'Item2': 1000})

        # convert to [{'text': 'Item1', 'value': 5000}, {'text': 'Item2', 'value': 1000}]
        self.rv.data = convert_data(arr)

class MyApp(App):
    def build(self):
        return Builder.load_file('test.kv')

if __name__ == '__main__':
    MyApp().run()

test.kv

<Button@Button>:
    font_size: 15
    size_hint_y:None
    height: 30

<Label@Label>:
    font_size: 15
    size_hint_y:None
    height: 30

<Item@GridLayout>:
    cols: 2
    text: ""
    value: 0
    padding : 5, 0
    spacing: 10, 0
    Label:
        size_hint_x: .35
        text: root.text
        halign: 'left'
        valign: 'middle'
        canvas.before:
            Color:
                rgb: .6, .6, .6
            Rectangle:
                pos: self.pos
                size: self.size

    Label:
        size_hint_x: .15
        text: str(root.value)
        halign: 'right'
        valign: 'middle'
        canvas.before:
            Color:
                rgb: .6, .6, .6
            Rectangle:
                pos: self.pos
                size: self.size

Invoice:
    rv: rv
    BoxLayout:
        orientation: "vertical"
        padding : 15, 15

        BoxLayout:
            orientation: "vertical"
            padding : 5, 5
            size_hint: .6, None
            pos_hint: {'x': .18,}


            BoxLayout:
                orientation: "horizontal"
                padding : 5, 5
                spacing: 10, 10
                size: 800, 40
                size_hint: 1, None

                Button:
                    text: "Show"
                    size_hint_x: .05
                    spacing_x: 30
                    on_press:root.abc()

        BoxLayout:
            orientation: "horizontal"
            size_hint: 1, 1

            BoxLayout:
                orientation: "vertical"
                size_hint: .5, 1
                padding : 0, 15
                spacing: 10, 10
                size: 500, 30

                Button:
                    text: "Invoice"
                    text_size: self.size
                    halign: 'center'
                    valign: 'middle'

                BoxLayout:
                    RecycleView:
                        id: rv
                        viewclass: 'Item'
                        RecycleBoxLayout:
                            default_size: None, dp(30)
                            default_size_hint: 1, None
                            size_hint_y: None
                            height: self.minimum_height
                            orientation: 'vertical'

【问题讨论】:

    标签: python python-2.7 kivy kivy-language


    【解决方案1】:

    当我在上一个问题中提出此代码时,我假设第二个字段始终是整数而不是字符串,因此创建value: 0 属性,正如所见,它只接受数值,因为它被映射为@ 987654322@。解决方案是通过更改为value:"" 将其转换为StringProperty,同时更改convert_data 的行,以便将整数转换为字符串。

    在第二种情况下,为了能够在文本中使用粗体,我们必须在 Label 中将标记设置为 True,并在我们要修改的文本之前和之后使用 [b] [/b]

    以上所有都意味着以下变化:

    *.py

    [...]
    
    def convert_data(data):
        l = []
        for item in data:
            for key, value in item.items():
                l.append({'text': key, 'value': str(value)}) # change this line
        return l
    
    [...]
    

    *.kv

    [...]
    
    <Item@GridLayout>:
        cols: 2
        text: ""
        value: ""
        padding : 5, 0
        spacing: 10, 0
        Label:
            size_hint_x: .35
            text: "[b]{}[/b]".format(root.text)
            markup: True
            halign: 'left'
            valign: 'middle'
            canvas.before:
                Color:
                    rgb: .6, .6, .6
                Rectangle:
                    pos: self.pos
                    size: self.size
    
        Label:
            size_hint_x: .15
            text: root.value
            halign: 'right'
            valign: 'middle'
            canvas.before:
                Color:
                    rgb: .6, .6, .6
                Rectangle:
                    pos: self.pos
                    size: self.size
    [...]
    

    【讨论】:

      猜你喜欢
      • 2019-02-12
      • 2013-05-21
      • 2021-02-16
      • 1970-01-01
      • 2017-12-19
      • 1970-01-01
      • 1970-01-01
      • 2016-05-22
      • 1970-01-01
      相关资源
      最近更新 更多