Kivy Button不必要地更改值(size_hint)

时间:2018-07-02 20:10:49

标签: python-3.x kivy kivy-language

因此,我已经研究了kivy库了几天,我做了一个简单的应用程序,其中的一些屏幕模拟了SignIn / Register环境。我注意到的是,在我的.kv文件中,当我为小部件设置“全局参数”时,Button参数根本没有变化。看看:

#: import FadeTransition kivy.uix.screenmanager.FadeTransition

Gerencia:
    transition: FadeTransition()
    TelaDeLogin:
    TelaDeCadastro:
    TelaEsqueci:
    TelaEmDesenvolvimento:

<Button>:
    size_hint: 1, 0.1
    font_size: 40
    color: 1, 1, 1, 1

<Label>:
    size_hint: 0.5, 0.1
    color: 1, 1, 0, 1
    font_size: 40 

<TextInput>:
    multiline: False
    size_hint: 0.5, 0.1


<TelaDeLogin>:
    name: "Login"
    FloatLayout:
        Button:
            on_release: app.root.current = "Desenvolvimento"
            pos_hint: {'x':0, 'y':0.2}
            text: 'Logar'

        Button:
            on_release: app.root.current = "Esqueci"
            pos_hint: {'x':0, 'y':0.1}
            text: 'Esqueci a senha'

        Button:
            on_release: app.root.current = "Cadastro" 
            pos_hint: {'x':0, 'y':0}
            text: 'Cadastre-se'

        Label:
            text: "Usuário"
            pos_hint: {'x':0.25, 'y':0.8}

        TextInput:
            pos_hint: {'x':0.25, 'y':0.7}

        Label:
            text: "Senha"
            pos_hint: {'x':0.25, 'y':0.6}

        TextInput:
            password: True
            pos_hint: {'x':0.25, 'y':0.5}

我省略了一些其他屏幕,但是它们无关紧要,发生了什么,我做了一些测试,更改“ <“ Button”>”内部的size_hint根本不影响我的Button的大小,它们是显然只是获得一些默认大小。发生的另一件奇怪的事情是,为了测试,我在“ <” Button“>”内部和“ <” Label“>”内部对font_size进行了一些更改,并且我在Label中输入的值也影响了我在屏幕上的Buttons ,颜色也一样。这样看来,我的Button的值是从“ <” Label“>”而不是从“ <” Button>“来获取的。有人知道这是怎么回事吗?

1 个答案:

答案 0 :(得分:1)

说明

您已经覆盖了基类Label,而Button是下面的Kivy文档中指定的Label。在您的Kivy App中,Button从您自定义的标签继承了 size_hint font_size color

Button

  

按钮是带有相关动作的标签,该动作在以下情况下触发   按下按钮(或在单击/触摸后释放按钮)。配置   按钮,相同的属性(填充,font_size等)和大小   系统用于Label类

解决方案

为Label和Button创建动态类。

  1. 创建一个继承自Button的动态类。将实例化的子项Button:替换为MyButton:
  2. 创建一个继承自Label的动态类。将实例化的子项Label:替换为MyLabel:

摘要

<MyButton@Button>:
    size_hint: 1, 0.1
    font_size: 40
    color: 1, 1, 1, 1

<MyLabel@Label>:
    size_hint: 0.5, 0.1
    color: 1, 1, 0, 1
    font_size: 40 
...

<TelaDeLogin>:
    name: "Login"
    FloatLayout:
        MyButton:
            on_release: app.root.current = "Desenvolvimento"
            pos_hint: {'x':0, 'y':0.2}
            text: 'Logar'

        MyButton:
            on_release: app.root.current = "Esqueci"
            pos_hint: {'x':0, 'y':0.1}
            text: 'Esqueci a senha'

        MyButton:
            on_release: app.root.current = "Cadastro" 
            pos_hint: {'x':0, 'y':0}
            text: 'Cadastre-se'

        MyLabel:
            text: "Usuário"
            pos_hint: {'x':0.25, 'y':0.8}

        TextInput:
            pos_hint: {'x':0.25, 'y':0.7}

        MyLabel:
            text: "Senha"
            pos_hint: {'x':0.25, 'y':0.6}

        TextInput:
            password: True
            pos_hint: {'x':0.25, 'y':0.5}

输出

Img01 - Using Dynamic Classes for Button and Label