gpt4 book ai didi

Python/Kivy - 替换调用函数的另一个屏幕中的标签值

转载 作者:行者123 更新时间:2023-12-01 02:20:34 25 4
gpt4 key购买 nike

我有一个有 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()

更清楚地说,用户必须单击SettingsScreen中的Button才能在第一个屏幕中设置NumericProperty的值到 20。

目前,如果我点击按钮,什么也不会发生。

您在上面看到的是摘录 - 如果您想了解更多内容,应用程序的完整代码存储在下面。

<强> https://github.com/marcogdepinto/LifeCounter

预先感谢您的帮助。

最佳答案

我认为问题在于,当您的按钮被单击并调用 set_20 时方法,该方法正在尝试设置属性 count SettingsScreen的到 20。

换句话说

def set_20(self):
self.count = 20

会尝试在 SettingsScreen 中设置 count 属性(因此出现 self )并且找不到它。还有一个count里面的属性(property)MenuScreen它对此一无所知。

要解决此问题,我认为您应该为 MenuScreen 提供一个 id

<MenuScreen>:
id: menu

并在 Button 的 on_release 方法中执行

on_release: menu.count = 20

示例

Python 文件

 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 文件

<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'

enter image description here

enter image description here

enter image description here

关于Python/Kivy - 替换调用函数的另一个屏幕中的标签值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47990103/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com