Изменить текст основного экрана (screenmanager) с помощью всплывающей кнопки Kivy - PullRequest
0 голосов
/ 28 июня 2019

У меня есть главный экран и всплывающее окно. button на главном экране получает текст от входа. Во всплывающем окне отображается кнопка, которая получает текст от кнопки на главном экране, при нажатии на кнопку во всплывающем окне текст с этой кнопки возвращается к кнопке на главном экране. По сути, я хочу, чтобы текст при нажатии нажимал туда-сюда между этими кнопками. Это работает для меня, пока главный экран является корневым виджетом. Когда я добавляю менеджер экрана, functions не изменяет текст, однако оператор print все равно будет выполняться.

Я попытался обратиться к главному экрану через приложение class и запустил метод, это запустит оператор печати, но не изменит текст кнопки. Единственный способ изменить текст кнопки - сделать главный экран корневым виджетом и вызвать on_press:root.my_func()
Мне нужно несколько экранов, поэтому я думаю, что это не решение.

from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.app import App 
from kivy.uix.widget import Widget
from kivy.properties import ObjectProperty
from kivy.uix.button import Button
from kivy.uix.label import Label
from kivy.lang import Builder
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.popup import Popup


pop_list = []

class MainWindow(Screen):

    my_input = ObjectProperty(None)
    btn_text = ObjectProperty(None)

    def write_button(self):

        self.btn_text.text = self.my_input.text
        self.my_input.text = ''

    def write_main(self,_text):

        self.btn_text.text = _text

    def show_popup(self):
            popup = MyPopup()
        popupWindow = Popup(size_hint=None,None) 
                  ,content=popup,size=(600,600))
        popupWindow.open()
        popup.write_pop()


    def write_pop(self):
        pop_list.append(self.btn_text.text)
        self.btn_text.text = ''



class MyPopup(FloatLayout):

    pop_btn = ObjectProperty(None)

    def write_pop(self):
        try:
            self.pop_btn.text = pop_list[0]
        except:
            pass

class SecondWindow(Screen):
    pass

class ScreenManager(ScreenManager):
    pass


kv = Builder.load_file('popup_test.kv')

class PopUpTestApp(App):
    mw = MainWindow()
    def build(self):
        return kv





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

И файл kv

<Button>:
font_size: 10
color:0.3,0.4,0.5,1
size_hint: 0.5,0.1

<Label>:
    font_size: 30
    color:0,0,0,1
    size_hint: 0.5,0.1
    canvas.before:
        Color:
            rgb: 1,1,1,1
        Rectangle:
            pos: self.pos
            size:self.size

ScreenManager:
    MainWindow:
    SecondWindow:   

<MainWindow>:
    name: 'main'

    my_input:my_input
    btn_text:btn_text

    Label:
        text: 'Input'
        pos_hint: {'x':0, 'top':1}


    TextInput:
        id: my_input
        size_hint: 0.5,0.1
        pos_hint: {'x':0, 'top':0.9}
        multiline:False
        font_size:30

    Label:
        text: 'write to popup button'
        pos_hint: {'right':1, 'y':0.9}


    Button:

        text:'write to mainscreen button'
        pos_hint: {'x':0.,'top':0.8}
        on_press: root.write_button()


    Button:
        id: btn_text
        pos_hint: {'right':1.,'y':0.8}
        on_press: root.write_pop()

    Button:
        text:'show popup'
        pos_hint: {'right':1,'y':0.4}
        on_press: root.show_popup()

<MyPopup>:

    id:pop

    pop_btn:pop_btn

    Label:
        text:'press to write to mainscreen button'
        size_hint: 1,0.1
        pos_hint: {'x': 0, 'top':1}

    Button:
        id:pop_btn
        pos_hint: {'x': 0, 'top':0.9}
        size_hint: 1,0.1
        on_press:app.mw.write_main(self.text)
        on_release:self.text = ''
...