首页 > 解决方案 > Pos_hint 和 size_hint 似乎在我的 kv 文件中不起作用,我不知道为什么

问题描述

所以,我一直在尝试一些 Kivy,并且我在我的 kv 文件中引入了一个与以下 python 代码相关联的按钮:

#importing library
import kivy
kivy.require('1.11.1') #version

#importing functionality
from kivy.app import App
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.widget import Widget
from kivy.properties import ObjectProperty

class FloatLayout(Widget):
    username = ObjectProperty(None)
    password = ObjectProperty(None)
    """idle code here, does nothing"""

class howyoudoin(App):
    def build(self):
        return FloatLayout()

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

这是我的 kv 文件:

<Button>:
    font_size:27
    size_hint: 1.0, 1.0
    background_color: 0.1, 0.5, 0.6, 1

<FloatLayout>:
    Button:
        pos_hint:{"top":1.0}
        id: btn
        text: "button"

不知何故, size_hint ans pos_hint 命令对我不起作用。这将返回我的按钮,但忽略 pos_hint 和 size_hint 命令。

按钮不代表所需的位置和大小

所有其他属性都起作用:当我在代码中更改 font_size 时,运行中的 font_size 也会发生变化。我不知道为什么:(

标签: pythonkivykivy-language

解决方案


您正在重新定义一个现有的类 ( FloatLayout),并且通过这样做,您使它变得简单Widget,而不是Layout. 既然你FloayLayout不是a Layout,那就不尊重size_hintand pos_hint。重新定义现有的类通常是一个坏主意。如果要扩展FloatLayout,请尝试以下操作:

#importing library
import kivy

kivy.require('1.11.1') #version

#importing functionality
from kivy.app import App
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.widget import Widget
from kivy.properties import ObjectProperty


class MyFloatLayout(FloatLayout):
    username = ObjectProperty(None)
    password = ObjectProperty(None)
    """idle code here, does nothing"""


class howyoudoin(App):
    def build(self):
        return MyFloatLayout()

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

kv文件:

<Button>:
    font_size:27
    size_hint: 1.0, 1.0
    background_color: 0.1, 0.5, 0.6, 1

<MyFloatLayout>:
    Button:
        pos_hint:{"top":1.0}
        id: btn
        text: "button"

在上面的代码中MyFloatLayoutextends FloatLayout,所以size_hintandpos_hintButton现在将被兑现。


推荐阅读