Pos_hint и size_hint, похоже, не работают в моем kv-файле, и я не знаю почему

#python #kivy #kivy-language

#python #kivy #kivy-language

Вопрос:

Итак, я попробовал немного 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 и pos_hint просто не будут работать для меня. Это возвращает мою кнопку, но игнорирует команды pos_hint и size_hint .

Кнопка не представляет желаемую позицию и размер

Все остальные атрибуты работают: когда я меняю font_size в коде, font_size также изменяется при запуске. Я не могу понять, почему:(

Ответ №1:

Вы переопределяете существующий class ( FloatLayout ) , и тем самым делаете его простым Widget , а не a Layout . Поскольку ваш FloayLayout не является a Layout , он не уважает size_hint и 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"
  

В приведенном выше коде MyFloatLayout расширяется FloatLayout , поэтому size_hint pos_hint Button теперь будут соблюдены и из.