Python / Kivy - 在调用函数的另一个屏幕中替换标签的值
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python / Kivy - 在调用函数的另一个屏幕中替换标签的值相关的知识,希望对你有一定的参考价值。
我有一个2屏幕的应用程序(ScreenManager
)。
我在第二个屏幕(SettingsScreen
)中编写了一个函数,我希望这个函数能够在第一个屏幕中更新标签。
以下两个类:
class MenuScreen(Screen):
count = NumericProperty(30)
class SettingsScreen(Screen):
def set_20(self):
self.count = 20
这些类链接到Kivy样式表中的按钮和标签,并带有两个不同的屏幕
<MenuScreen>:
FloatLayout:
orientation: 'horizontal'
Label:
id: l_label
text: str(root.count)
<SettingsScreen>:
BoxLayout:
orientation: 'vertical'
padding: 50
FloatLayout:
Button:
text: "20"
on_release: root.set_20()
为了更清楚,用户必须单击Button
中的SettingsScreen
,将第一个屏幕中NumericProperty
的值设置为20。
目前,如果我点击按钮没有任何反应。
你在上面看到的是一个摘录 - 如果你想看到更多,应用程序的完整代码存储在下面。
https://github.com/marcogdepinto/LifeCounter
在此先感谢您的帮助。
答案
我认为问题在于当你的按钮被点击并调用set_20
方法时,该方法试图将count
的属性SettingsScreen
设置为20。
换一种说法
def set_20(self):
self.count = 20
会尝试在SettingsScreen
内设置count属性(因此单词self
)并且找不到它。在count
内还有另一个MenuScreen
财产,它对此一无所知。
为了解决这个问题,我认为你应该给MenuScreen一个id
<MenuScreen>:
id: menu
并在Button的on_release方法中
on_release: menu.count = 20
EXAMPLE
他妈的哥们
class MenuScreen(Screen):
counter = NumericProperty(0)
class SettingsScreen(Screen):
pass
class MyWidget(ScreenManager):
pass
class MyRandomApp(App):
def build(self):
return MyWidget()
if __name__ == '__main__':
MyRandomApp().run()
kv file
<MyWidget>:
id:manager
MenuScreen:
id: menu
name: 'menuscreen'
BoxLayout:
orientation: 'vertical'
Label:
text: str(menu.counter)
Button:
text: 'Go to S2'
on_press: manager.current = 'settingsscreen'
SettingsScreen:
id: settings
name: 'settingsscreen'
BoxLayout:
orientation: 'vertical'
Button:
text: 'Click to edit label of Prev screen'
on_press: menu.counter = 20
Button:
text: 'Go to S1'
on_press: manager.current = 'menuscreen'
以上是关于Python / Kivy - 在调用函数的另一个屏幕中替换标签的值的主要内容,如果未能解决你的问题,请参考以下文章
Python/Kivy:如何在 ctrl+a 键盘事件上调用函数