Как можно установить текст в Popup в Kivy?

Как я могу установить многострочный текст в Label внутри MyPopup? 

<b>KV code</b> 
``` 
#: import Factory kivy.factory.Factory 
MyPopup@Popup: 
    auto_dismiss: False 
    title: "Мой Попуп" 
    BoxLayout: 
        orientation: 'vertical' 
        padding: 20 
        Button: 
            text: 'My status is: ' + self.state 
        #on_press: 
        Label: 
            id: my_custom_label 
            text:    ??????????????????????? 
        Button: 
            text: 'Close me!' 
            on_press: root.dismiss() 
``` 
<br/> 

<b>Controller:</b> 
``` 
Button: 
    text: 'Кнопка' 
    on_release: Factory.MyPopup().open() 
    size_hint: .2,.1 
    pos_hint:{'x':.5,'y':.2} 
``` 
<br/> 

<b>Python code:</b> 
``` 
from kivy.app import App 
from kivy.uix.floatlayout import FloatLayout 
from kivy.properties import ObjectProperty, StringProperty 
from kivy.lang.builder import Builder 

Builder.load_file("Poput_ex.kv") 

TXT = """Мы весёлые ребята, 
наше имя — октябрята. 
Мы не любим лишних слов. 
— Будь готов! — Всегда готов. 
Друг за другом станем рядом 
и одним большим отрядом 
скажем сотней голосов: 
— Будь готов! — Всегда готов.""" 

class Controller(FloatLayout): 
    def __init__(self, **kwargs): 
        super(Controller, self).__init__(**kwargs) 
        mytext = StringProperty(TXT) 

class ControllerApp(App): 
    def build(self): 
        return Controller() 

if __name__ == '__main__': 
    ControllerApp().run() 
```
  • 11 сентября 2024 г. 11:13
Ответы на вопрос 2
Чтобы установить многострочный текст в `Label` внутри `MyPopup` в Kivy, вы можете использовать `StringProperty` для передачи текста из класса `Controller` в попап. Давайте интегрируем это в ваш код.

Вот как вы можете это сделать:

1. Создайте свойство `StringProperty` в классе `MyPopup`.
2. Установите это свойство при открытии попапа.
3. Используйте это свойство в `Label` внутри `Popup`.

Вот как будет выглядеть измененный код:

### KV code
```kv
#: import Factory kivy.factory.Factory 

<MyPopup@Popup>: 
    auto_dismiss: False 
    title: "Мой Попуп" 
    BoxLayout: 
        orientation: 'vertical' 
        padding: 20 
        Button: 
            text: 'My status is: ' + self.state 
        Label: 
            id: my_custom_label 
            text: root.popup_text  # Используем свойство popup_text из MyPopup
        Button: 
            text: 'Close me!' 
            on_press: root.dismiss() 

<Controller>:
    Button: 
        text: 'Кнопка' 
        on_release: 
            my_popup = Factory.MyPopup() 
            my_popup.popup_text = self.mytext  # Передаем текст в popup
            my_popup.open() 
        size_hint: .2, .1 
        pos_hint: {'x': .5, 'y': .2} 
```

### Python code
```python
from kivy.app import App 
from kivy.uix.floatlayout import FloatLayout 
from kivy.properties import StringProperty 
from kivy.lang.builder import Builder 

Builder.load_file("Poput_ex.kv") 

TXT = """Мы весёлые ребята, 
наше имя — октябрята. 
Мы не любим лишних слов. 
— Будь готов! — Всегда готов. 
Друг за другом станем рядом 
и одним большим отрядом 
скажем сотней голосов: 
— Будь готов! — Всегда готов.""" 

class MyPopup(Popup):
    popup_text = StringProperty("")  # Создаем StringProperty для текста

class Controller(FloatLayout): 
    mytext = StringProperty(TXT)  # Используем StringProperty для хранения текста

class ControllerApp(App): 
    def build(self): 
        return Controller() 

if __name__ == '__main__': 
    ControllerApp().run() 
```

### Объяснение изменений:
1. Мы создаем новый класс `MyPopup`, который наследуется от `Popup`, и добавляем свойство `popup_text`, чтобы хранить текст, который будет отображен в `Label`.
2. Мы изменяем кнопку в `Controller`, чтобы при нажатии она создавала экземпляр `MyPopup`, устанавливала свойство `popup_text` на значение `self.mytext` и открывала попап.
3. В `Label` внутри `MyPopup` текст будет отображён через `root.popup_text`, что позволяет динамически заполнять его содержимое. 

Теперь, когда вы нажимаете кнопку, откроется попап, и в нем будет отображаться многострочный текст.
from kivy.app import App
from kivy.uix.floatlayout import FloatLayout
from kivy.properties import ObjectProperty, StringProperty
from kivy.lang.builder import Builder

Builder.load_file("Poput_ex.kv")

TXT = """Мы весёлые ребята,
наше имя — октябрята.
Мы не любим лишних слов.
— Будь готов! — Всегда готов.
Друг за другом станем рядом
и одним большим отрядом
скажем сотней голосов:
— Будь готов! — Всегда готов."""
class Controller(FloatLayout):
    def __init__(self, **kwargs):
        super(Controller, self).__init__(**kwargs)
 
class ControllerApp(App):
    def build(self):
        self.txt = 'some text'
        return Controller()
if __name__ == '__main__':
    ControllerApp().run()

#: import Factory kivy.factory.Factory
MyPopup@Popup:
    auto_dismiss: False
    title: "Мой Попуп"
    BoxLayout:
        orientation: 'vertical'
        padding: 20
        Button:
            text: 'My status is: ' + self.state
            #on_press:
        Label:
            id: my_custom_label
            text: app.text
        Button:
            text: 'Close me!'
            on_press: root.dismiss()
Похожие вопросы