Kivy按钮位置和标签背景颜色

时间:2018-04-04 01:23:43

标签: python kivy

我在Kivy中设置了一个网格布局,带有3个按钮和一个文本区域。三个按钮不会在0,0开始,并且不应用标签背景颜色。

这是我的主要代码

import kivy
import os
import sys
from kivy.uix.gridlayout import GridLayout
from kivy.app import App
from kivy.lang import Builder

Builder.load_file('exceltoolui.kv')

class checker_ui(GridLayout):
    pass


class Checker(App):
    def build(self):
        return checker_ui()

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

这是我的.kv文件代码

<checker_ui>:
    rows:2
    cols:1
    padding: 10
    spacing: 10
    BoxLayout:
        Button:
            id:this_week_btn
            text: 'This Week Report'
            size_hint:(None,None)
            size: root.width/3,root.height/12
        Button:
            id:last_week_btn
            text: 'Last Week Report'
            size_hint:(None,None)
            size: root.width/3,root.height/12
        Button:
            id:confirm_btn
            text: 'Start Checking'
            size_hint:(None,None)
            size: root.width/3,root.height/12
    BoxLayout:
        Label:
            id:entry
            text:'test'
            font_size:18
            multiline:True
            background_color:1,50,0,1

我当前的输出在按钮上方有一个很大的黑色空间,标签没有背景颜色。我的预期输出是按钮从顶部而不是屏幕中心开始。

Current Output

1 个答案:

答案 0 :(得分:2)

在布局中设置窗口小部件而不为窗口小部件设置size_hint时,布局将设置等距大小,因此请注意BoxLayout占据窗口的一半。解决方案是将None设置为size_hint_y,使其位于顶部,高度最小。

另一方面,如果要设置背景颜色,则必须使用画布。此外,rgba的组件位于01范围内。

对于按钮,宽度必须由布局确定,如果您设置它并且它大于布局允许的范围,您将看到不充分的设计,如图像中的第三个按钮所示,您的样本不回应填充。

<checker_ui>:
    rows:2
    cols:1
    padding: 10
    spacing: 10
    BoxLayout:
        size_hint_y: None
        height: self.minimum_height
        Button:
            id:this_week_btn
            text: 'This Week Report'
            size_hint:(1, None)
            height: root.height/12
        Button:
            id:last_week_btn
            text: 'Last Week Report'
            size_hint:(1, None)
            height: root.height/12
        Button:
            id:confirm_btn
            text: 'Start Checking'
            size_hint:(1, None)
            height: root.height/12
    BoxLayout:
        Label:
            id:entry
            text:'test\nTEST'
            font_size:18
            multiline:True
            canvas.before:
                Color:
                    rgba: 1, .5, 0, 1
                Rectangle:
                    pos: self.pos
                    size: self.size

enter image description here