【问题标题】:Kivy: How to change the attribute's value like text of label from current screen in another screenKivy:如何在另一个屏幕中从当前屏幕更改属性值,例如标签文本
【发布时间】:2021-07-06 06:15:46
【问题描述】:

我试图从当前屏幕更改另一个屏幕的文本。但是没有用

from kivy.app import App
from kivy.uix.screenmanager import Screen, ScreenManager
from kivy.properties import ObjectProperty
from kivy.lang.builder import Builder


Builder.load_string("""
<Input_Screen>:
    input: input
    BoxLayout:
        orientation : "vertical"
        TextInput:
            id: input
            text: "Changed"
        Button:
            text: "Enter"
            on_press : root.clicked()
            
<Display_Screen>:
    nice: nice
    BoxLayout:
        orientation : "vertical"
        Label:
            id: nice
            text: "NotChanged"
    

""")


class Input_Screen(Screen):
    input = ObjectProperty(None)
    def clicked(self):
        Display_Screen().change()

class Display_Screen(Screen):
    nice = ObjectProperty(None)
    def change(self):
        print(self.nice.text) #Checking the Current text of The Label
        print(Input_Screen().input.text) #Checking What do we want to change
        self.nice.text = Input_Screen().input.text
        print(self.nice.text) #Checking if it has change or not
        MyApp().sm.current = "Ds" #Changing Screen to Display_Screen
        print(self.nice.text) #Checking if it has change or not


class MyApp(App):
    sm = ScreenManager()
    def build(self):
        self.sm.add_widget(Input_Screen(name="Is"))
        self.sm.add_widget(Display_Screen(name="Ds"))
        return self.sm

MyApp().run()

我在控制台中得到的信息:

NotChanged #Checked the Current text of The Label
Changed #Checked What do we want to change
Changed #Checked if it has change or not
Changed #Checked if it has change or not

它说我的标签的文本已更改,但是当它进入下一个屏幕时它没有更改。

Display_Screen

谁知道问题出在哪里?请帮帮我

【问题讨论】:

    标签: python kivy kivy-language


    【解决方案1】:

    每当您使用ClassName() 之类的结构时,您都在创建ClassName 的新实例。您正在 change() 方法和 clicked() 方法中执行此操作。每当您这样做时,您都在引用该新实例,而不是 GUI 中的实例。

    要解决这个问题,请更改:

    def clicked(self):
        Display_Screen().change()
    

    到:

    def clicked(self):
        self.manager.get_screen('Ds').change()
    

    并在您的 change() 方法中,替换:

    Input_Screen()
    

    与:

    self.manager.get_screen('Is')
    

    并替换”

    MyApp()
    

    与:

    App.get_running_app()
    

    【讨论】:

    • 非常感谢:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多