如何在 kivy 中使用 Stringproperty() 更改标签的文本



我只是试图通过更改定义文本的变量来更改标签的文本,但它不起作用。然而我使用了 Stringproperty((。如果可能的话,我希望一旦我们按下按钮,文本就会直接更改,通过变量 theText

请问如何解决这个问题?

这是我的代码作为示例:

from kivy.app import App
from kivy.properties import StringProperty
from kivy.core.window import Window
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen

class MenuScreen(Screen):
pass

class SettingsScreen(Screen):
def change_text(self):
self.root.theText = '1'
class MyScreenManager(ScreenManager):
# This is the text that both Labels may display
theText = StringProperty('0')

kv = """
MyScreenManager:
MenuScreen:
name: 'menu'
SettingsScreen:
name: 'settings'
<MenuScreen>:
label_wid : ratio
FloatLayout:         
Button:
text: "options"
pos: 270, 240
size_hint: .30, .10
background_color: 0,1,0,0.75
on_press: root.manager.current = 'settings'
Label:
id:ratio
# Use theText Property from MyScreenManager
text: root.manager.theText
pos: 0,90
font_size:30
color:1,0,0,1
<SettingsScreen>:
FloatLayout:
Label:
id:ratio
# Use theText Property from MyScreenManager
text: root.manager.theText
pos: 0,90
font_size:30
color:1,0,0,1
Button:
text: "options"
pos: 270, 240
size_hint: .30, .10
background_color: 0,1,0,0.75
on_press: root.change_text
"""

class Quizz(App):
def build(self):
self.title = 'Quizz'
Window.clearcolor = (0, 1, 1, 0.25)
return Builder.load_string(kv)


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

两个问题。首先,在kv中将方法调用分配给Button时,必须包含()。是的,与python中的其他任何地方都相反。所以on_press应该是:

on_press: root.change_text()

其次,change_text()方法需要引用MyScreenManager实例,这在SettingsScreen中只是self.manager。所以change_text()应该是:

def change_text(self):
self.manager.theText = '1'

最新更新