【问题标题】:(KivyMD) How to change the text of an MDLabel?(KivyMD) 如何更改 MDLabel 的文本?
【发布时间】:2020-09-30 07:50:59
【问题描述】:

这是我的代码:

from kivymd.app import MDApp
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen

n = 1

class Screen1(Screen):
    pass

class Screen2(Screen):
    def set_number(self, n):
        self.ids["number"].text == f"{n}"
        print(f"The n variabile value is: {n}")
        txt = self.ids["number"].text
        print(f"The displayed number is: {txt}\n")
        return
    
    

sm = ScreenManager()
sm.add_widget(Screen1(name="Screen1"))
sm.add_widget(Screen2(name="Screen2"))


class TestApp(MDApp):

    def build(self):
       self.title = "Test app"
       self.theme_cls.primary_palette = "Indigo"
       self.theme_cls.primary_hue = "600"
       screen =  Builder.load_file("test.kv")
       return screen



    def arrow_up(self):
        global n
        if n == 5:
            pass
        else:
            n += 1
            Screen2().set_number(n)
        
    def arrow_down(self):
        global n
        if n == 1:
            pass
        else:
            n -= 1
            Screen2().set_number(n)
        





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

这里是我的 KV 文件:

ScreenManager:
    id: scrn_mngr
    Screen1:
    Screen2:


<Screen1>:
    id: Scrn1    
    name: "Screen1"
    MDRectangleFlatIconButton:
        text: "Next screen"
        icon: "arrow-right"
        pos_hint: {"center_x": .5, "center_y": .5}
        width: dp(180)
        on_press: root.manager.current = "Screen2" 



<Screen2>
    id: Scrn2 
    name: "Screen2"    
    MDFloatingActionButton:
        icon: "arrow-up-bold-outline"
        md_bg_color: app.theme_cls.primary_color
        pos_hint: {"center_x": .4, "center_y": .5}
        on_press: app.arrow_up()
    MDFloatingActionButton:
        icon: "arrow-down-bold-outline"
        md_bg_color: app.theme_cls.primary_color
        pos_hint: {"center_x": .6, "center_y": .5}
        on_press: app.arrow_down()    
    MDLabel:
        text: "Number"
        halign: "center"
        pos_hint: {"center_x": .5, "center_y": .55}
    MDLabel:
        id: number
        text: "1"
        halign: "center"
        pos_hint: {"center_x": .5, "center_y": .5}

我正在尝试使用第二个屏幕上的两个 MDFloatingActionButton 来增加和减少变量 n。问题是 MDLabel 的 text 属性不会随着 n 的增加或减少而变化,并且始终显示数字 1,即使 n 实际上正确更改。 我不知道出了什么问题,有人可以帮我吗?谢谢!

【问题讨论】:

    标签: python kivy kivymd


    【解决方案1】:

    线条:

    Screen2().set_number(n)
    

    不会对您的 GUI 产生影响。当您使用Screen2() 时,您正在创建一个Screen2 的新实例,它与您的GUI 中显示的实例无关。所以调用Screen2().set_number(n) 是在Screen2 的实例中设置n,它不会显示在您的GUI 中。

    有几种方法可以解决此问题。一种方法是将arrow_up()arrow_down() 方法移动到Screen2 类中,如下所示:

    class Screen2(Screen):
        def set_number(self, n):
            self.ids["number"].text = f"{n}"  # Note: changed == to =
            print(f"The n variabile value is: {n}")
            txt = self.ids["number"].text
            print(f"The displayed number is: {txt}\n")
            return
    
        def arrow_up(self):
            global n
            if n == 5:
                pass
            else:
                n += 1
                self.set_number(n)
    
        def arrow_down(self):
            global n
            if n == 1:
                pass
            else:
                n -= 1
                self.set_number(n)
    

    然后在'kv'中将app.arrow_down()app.arrow_up()改为root而不是app

    <Screen2>
        id: Scrn2 
        name: "Screen2"    
        MDFloatingActionButton:
            icon: "arrow-up-bold-outline"
            md_bg_color: app.theme_cls.primary_color
            pos_hint: {"center_x": .4, "center_y": .5}
            on_press: root.arrow_up()
        MDFloatingActionButton:
            icon: "arrow-down-bold-outline"
            md_bg_color: app.theme_cls.primary_color
            pos_hint: {"center_x": .6, "center_y": .5}
            on_press: root.arrow_down()    
        MDLabel:
            text: "Number"
            halign: "center"
            pos_hint: {"center_x": .5, "center_y": .55}
        MDLabel:
            id: number
            text: "1"
            halign: "center"
            pos_hint: {"center_x": .5, "center_y": .5}
    

    【讨论】:

      猜你喜欢
      • 2021-04-16
      • 2022-01-07
      • 1970-01-01
      • 1970-01-01
      • 2021-11-21
      • 2021-04-22
      • 2021-04-14
      • 2020-11-17
      • 1970-01-01
      相关资源
      最近更新 更多