【问题标题】:How do I set Id of widget inside python file?如何在 python 文件中设置小部件的 ID?
【发布时间】:2021-05-23 04:22:04
【问题描述】:

我正在尝试从另一个屏幕更改一个屏幕内的 MDLabel 的文本。我可以引用屏幕本身,但由于我没有使用 kv 语言,我无法设置我试图引用的 MDLabel 的 Id。

有没有办法在 Python 中设置 MDLabel 的 Id 并将其添加到它所在屏幕的 self.ids 中? -要么。还有其他方法可以引用另一个屏幕的小部件吗?

我的代码:

def main():
    class HomeScreen(Screen, GridLayout, MDApp):
        def __init__(self, **kwargs):
            super(HomeScreen, self).__init__(**kwargs)

            self.add_widget(MDRaisedButton(text='Read', size_hint=(.3, .2), font_size='30sp', on_press=lambda x:self.changerReadMail()))

        def changerReadMail(self, *args):
            self.manager.transition.direction = 'right'
            # It's here I want to change the text of label inside the ReadMail class.
            self.manager.current = 'read'

    class ReadMail(Screen, FloatLayout, MDApp):
        def __init__(self, **kwargs):
            super(ReadMail, self).__init__(**kwargs)
            label = (MDLabel(text='hej'))
            self.add_widget(label)
            self.add_widget(MDFillRoundFlatButton(text='Back', font_size='20sp', size_hint=(.1,.1), pos_hint={'x':.01, 'y':.02}, on_press=lambda x:self.changerInbox()))   

        def changerInbox(self, *args):
            self.manager.transition.direction = 'left'
            self.manager.current = 'home'

    class KivyApp(MDApp): 
        def build(self):
            Window.size = (1000, 600)
            self.sm = ScreenManager()
           
            self.sm.add_widget(HomeScreen(name='home'))
            self.sm.add_widget(ReadMail(name='read'))

            self.sm.current = 'home'
            return self.sm
        
    KivyApp().run()


if __name__ == '__main__':
    main()

【问题讨论】:

    标签: python kivy kivymd


    【解决方案1】:

    我解决了这个问题!

    这是我的解决方案(参见注释为“这是新行”的行):

    import weakref #This is a new line
    
    def main():
        class HomeScreen(Screen, GridLayout, MDApp):
            def __init__(self, **kwargs):
                super(HomeScreen, self).__init__(**kwargs)
    
                self.add_widget(MDRaisedButton(text='Read', size_hint=(.3, .2), font_size='30sp', on_press=lambda x:self.changerReadMail()))
    
            def changerReadMail(self, *args):
                self.manager.transition.direction = 'right'
                self.manager.get_screen('read').ids.test.text = 'test' #This is a new line
                self.manager.current = 'read'
    
        class ReadMail(Screen, FloatLayout, MDApp):
            def __init__(self, **kwargs):
                super(ReadMail, self).__init__(**kwargs)
                label = (MDLabel())
                self.ids['test'] = weakref.ref(label) #This is a new line
                self.add_widget(label)
                self.add_widget(MDFillRoundFlatButton(text='Back', font_size='20sp', size_hint=(.1,.1), pos_hint={'x':.01, 'y':.02}, on_press=lambda x:self.changerInbox()))   
    
            def changerInbox(self, *args):
                self.manager.transition.direction = 'left'
                self.manager.current = 'home'
    
        class KivyApp(MDApp): 
            def build(self):
                Window.size = (1000, 600)
                self.sm = ScreenManager()
               
                self.sm.add_widget(HomeScreen(name='home'))
                self.sm.add_widget(ReadMail(name='read'))
    
                self.sm.current = 'home'
                return self.sm
            
        KivyApp().run()
    
    
    if __name__ == '__main__':
        main()
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-04
      • 1970-01-01
      • 2022-01-03
      • 2021-12-18
      • 1970-01-01
      • 2023-04-01
      • 2015-01-12
      相关资源
      最近更新 更多