Почему, когда я использую один и тот же макет для двух классов, один макет не отображается? - PullRequest
0 голосов
/ 24 апреля 2020

Я пытаюсь проверить разницу в наличии пакета kivy. Windows внутри класса и вне класса (чтобы попытаться решить возникшую у меня проблему: Kivy TextInput выше Android клавиатура, однако остальная часть экрана остается там, где она ).

Поэтому я пытаюсь проверить, есть ли у меня два отдельных FloatLayouts в двух классах, могу ли я контролировать только один из них. Однако, что я заметил, так это то, что если я включаю оба FloatLayouts в один и тот же класс, он отображает все нормально, но если я пытаюсь разместить их в двух отдельных классах, верхний исчезает, и как бы я ни менял позицию, я могу Я не вижу этого на моем экране. Почему это происходит?

Вот мой файл .py:

from kivy.app import App
from kivy.lang import Builder
from kivy.uix.widget import Widget
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.floatlayout import FloatLayout
from kivy.core.window import Window

#Window.softinput_mode = "below_target"

class Header(FloatLayout):
    pass

class TestBox(FloatLayout):
    pass

kv = Builder.load_file("rec_view.kv")

class RVTestApp(App):
    def build(self):
        return TestBox()
        #return kv

if __name__ == "__main__":
    RVTestApp().run()

Вот мой файл .kv:

<Header>:
   FloatLayout:
      Label:
         pos_hint: {'center_x': 0.5, "top": 0.1}
         size_hint: (0.2, 0.5)
         font_size: 40
         text: "TEXT AT TOP OF SCREEN"
<TestBox>:
   FloatLayout:
      TextInput:
         pos_hint: {"x": 0.1, "y": 0.05}
         size_hint: (0.3, 0.05)
         multline:False
      Button:
         text: "CHECK BUTTON FOR ANSWERS AT BOTTOM OF SCREEN"
         pos_hint: {"x": 0.6, "y": 0.05}
         size_hint: (0.3, 0.05)

Я думал, что это изначально, потому что я возвращал TestBox (), но даже если я возвращаю Header () или kv, он показывает пустое значение.

Любая помощь будет принята с благодарностью!

1 Ответ

1 голос
/ 24 апреля 2020

Я попробовал ваш код, и не было проблем с возвратом TestBox(), однако Header() ничего не отображало. Это было связано прежде всего с тем, что pos_hint top был установлен на 0.1 вместо 1.

Обе функции теперь работают

from kivy.app import App
from kivy.lang import Builder
from kivy.uix.widget import Widget
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.floatlayout import FloatLayout
from kivy.core.window import Window

#Window.softinput_mode = "below_target"
string = '''
<Header>:
   FloatLayout:
      Label:
         pos_hint: {"top": 1,'center_x':0.5}
         size_hint: (0.2, 0.5)
         font_size: 40
         text: "TEXT AT TOP OF SCREEN"

<TestBox>:
   FloatLayout:
      TextInput:
         pos_hint: {"x": 0.1, "y": 0.05}
         size_hint: (0.3, 0.05)
         multline:False
      Button:
         text: "CHECK BUTTON FOR ANSWERS AT BOTTOM OF SCREEN"
         pos_hint: {"x": 0.6, "y": 0.05}
         size_hint: (0.3, 0.05)
    '''
class Header(FloatLayout):
    pass

class TestBox(FloatLayout):
    pass

kv = Builder.load_string(string)

class RVTestApp(App):
    def build(self):
        return TestBox()
        #return Header()

        #return kv

if __name__ == "__main__":
    RVTestApp().run()
...