Создание подкласса ModalView в Kivy нарушает положение представления и дочерних элементов - PullRequest
0 голосов
/ 06 мая 2020

У меня очень упрощенный c случай окна с одной кнопкой. При отпускании кнопки я хочу вызвать модальное представление с текстом на нем. При каждом выпуске кнопки я создаю и открываю экземпляр ModalView, и он работает:

from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.modalview import ModalView
from kivy.uix.label import Label

class AButton(Button):
    def on_release(self, *largs):
        view = ModalView(size_hint=(None, None), size=[200, 200])
        view.add_widget(Label(text='I am a modal view'))
        view.open()


class MyApp(App):
    def build(self):
        return AButton()


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

Теперь предположим, что я хочу создать подкласс ModalView, поэтому мне не нужно указывать size_hint и size каждый раз, когда я открываю модальное окно. Это код после этого изменения:

from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.modalview import ModalView
from kivy.uix.label import Label
from kivy.properties import ListProperty

class AButton(Button):
    def on_release(self, *largs):
        view = ModalView2()
        view.add_widget(Label(text='I am a modal view'))
        view.open()


class ModalView2(ModalView):
    size_hint = ListProperty([None, None])
    size = ListProperty([200, 200])

    def __init__(self, **kwargs):
        super(ModalView2, self).__init__(**kwargs)


class MyApp(App):
    def build(self):
        return AButton()


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

ModalView и Label позиции полностью перепутались. Я пробовал с anchor_x и anchor_y в ModalView2, пытаясь исправить положение метки, но безуспешно. Что я делаю не так?

1 Ответ

0 голосов
/ 06 мая 2020

У ModalView уже есть атрибуты size_hint и size, поэтому вам не нужно создавать новые, просто установите для существующих атрибутов нужные значения:

class ModalView2(ModalView):

    def __init__(self, **kwargs):
        super(ModalView2, self).__init__(**kwargs)
        self.size_hint = (None, None)
        self.size = (200, 200)
...