Kivy按功能更新标签

2024-05-19 13:08:34 发布

您现在位置:Python中文网/ 问答频道 /正文

想弄清楚kivy中的setter绑定是如何工作的。我发现API中的文档非常糟糕。他们有很多期待,有吨的假设知识围绕他们的kivy引擎。在

不管怎样,大声说。这是我的密码。在

    class ScreenOne(Screen):
        story = StringProperty('')
        def __init__ (self,**kwargs):
            super (ScreenOne, self).__init__(**kwargs)

            Buttonlayout = GridLayout(orientation='vertical',cols=1, spacing=2, size_hint_y=None)
            Buttonlayout.bind(minimum_height=Buttonlayout.setter('height'))

            btn = Button(text="change the text", size_hint_y=None, height=80,text_size=(350,None),font_size='12sp')
            btn.bind(on_press=partial(self.changer,"text has changed"))

            Buttonlayout.add_widget(btn)
            root.add_widget(Buttonlayout)
            self.add_widget(root)

        def changer(self,*args):

            self.story = args[0]
            self.manager.current = 'screen2'

    class ScreenTwo(Screen):

        def __init__(self,**kwargs):
            super (ScreenTwo,self).__init__(**kwargs)
            my_box1 = BoxLayout(orientation='vertical')
            L1 = Label(text=self.screenOne.story,font_size='24dp')
            L1.bind(self.L1.setter('text')= story)
            my_button1 = Button(text="Go to screen 1",size_hint_y=None, size_y=100)
            my_button1.bind(on_press=self.changer)

            my_box1.add_widget(self.L1)
            my_box1.add_widget(my_button1)
            self.add_widget(my_box1)

        def changer(self,*args):
            self.manager.current = 'screen1'

我的想法是,当我按下类screen1中的按钮,它改变了屏幕,它应该改变屏幕2中的标签。我认为最好的方法是使用属性,然后将标签绑定到StringProperty中的更改。我可以很好地改变故事中的字符串,如果我添加一个打印指令,我可以看到它的变化。只是更新了我有问题的标签。在

我好像不能让它工作。我们将非常感谢您的帮助和指导。在


Tags: textselfnoneaddsizeinitbindmy
1条回答
网友
1楼 · 发布于 2024-05-19 13:08:34

请注意,仅使用kv语言可以(几乎)完全实现所需的行为:

myapp.py

from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.properties import StringProperty, ObjectProperty
from kivy.uix.gridlayout import GridLayout
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.label import Label
from kivy.uix.button import Button
from kivy.app import App

class ScreenOne(Screen):
    story = StringProperty('')

    def changer(self,*args):
        self.story += args[0]
        self.manager.current = 'screen2'

class ScreenTwo(Screen):
    pass

class MyApp(App):
    pass

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

my.kv

^{pr2}$

但是,如果要使用Label的setter,请更改MyApp类定义:

^{3}$

并确保Labeltext是静态的:text: 'start ...'。在

相关问题 更多 >