【问题标题】:Kivy update label after type键入后 Kivy 更新标签
【发布时间】:2020-11-06 13:56:35
【问题描述】:

你好,我是新手。我试图向我的屏幕类发送价值。我认为我发送正确,但它没有自我更新。如果我在 .kv 文件中写东西,它确实会为我更新。但我不确定如何将新值更新到我的标签。

from kivy.app import App
from kivy.uix.screenmanager import Screen,ScreenManager
from kivy.lang import Builder
from kivy.properties import StringProperty
from kivy.uix.popup import Popup
Builder.load_string('''
<SM>:
    Page1:
        name: 'page1name'
<TestPop>:
    title: 'test pop title'
    BoxLayout:
        orientation: 'vertical'
        TextInput:
            id: test_textinput
        Button:
            text: 'Confirm'
            on_release: root.dismiss()
<Page1>:
    BoxLayout:
        orientation: 'vertical'
        Button:
            text: 'Open Pop'
            on_release: root.func1()
        Label:
            text: root.my_label_string
''')
class Page1(Screen):
    my_label_string = StringProperty('Default')
    def func1(self):
        a = TestPop()
        a.open()
class TestPop(Popup):
    my_tinput_string = StringProperty('')
    def on_dismiss(self):
        new_text = self.ids.test_textinput.text
        Page1.my_label_string = new_text
class SM(ScreenManager):
    pass
class MainApp(App):
    def build(self):
        return SM()
if __name__ in ('__main__'):
    MainApp().run()

【问题讨论】:

    标签: python kivy kivy-language


    【解决方案1】:

    你不能使用

    Page1.my_label_string = new_text
    

    因为它引用了Page1 类,而不是你的GUI 中该类的实例。为了在Page1 的实例中设置text,请尝试将上面的行替换为:

    App.get_running_app().root.get_screen('page1name').my_label_string = new_text
    

    以上代码获取App(即ScreenManager)的root,并使用它访问Page1Screen,并设置该实例的my_label_string。 Kivy 然后根据您的kv 设置Labeltext

    【讨论】:

    • 谢谢!现在可以理解了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-15
    • 1970-01-01
    • 1970-01-01
    • 2019-05-15
    • 2015-06-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多