python - 使用 kivy 从不同类中引用类的方法
问题描述
我有一个具有多个屏幕的应用程序,我试图从另一个屏幕中调用我的 ScreenOne 的方法。该代码是一个最小的示例。
当我在第二个屏幕中时,我想知道引用此 ScreenOne 方法的正确方法。
cart_list = {}
class ScreenOne(Screen):
def update_cart(self):
cart_list.update({'Item one': 1.00})
for key, value in cart_list:
print(key, value)
class ScreenTwo(Screen):
pass
相关的kv代码如下
ScreenTwo:
Button:
id: item_1
text: "Add to cart"
on_press: MainScreen.update_cart()
解决方案
解决方案
.kv 文件
- 添加
id
到 ScreenOne。 - 默认情况下,每个屏幕都有一个属性,该属性为您提供所用ScreenManager
manager
的实例。 - 参考使用方法
root.manager.ids.screen_one.update_cart()
以下是 Python 脚本所需的一些小更新。
.py 文件
- 在方法中声明
cart_list
,global
update_cart
- 附加
.items()
到cart_list
例如for key, value in cart_list.items():
例子
主文件
from kivy.app import App
from kivy.uix.screenmanager import Screen
from kivy.lang import Builder
cart_list = {}
class ScreenOne(Screen):
def update_cart(self):
global cart_list
cart_list.update({'Item one': 1.00})
for key, value in cart_list.items():
print(key, value)
class ScreenTwo(Screen):
pass
class TestApp(App):
def build(self):
return Builder.load_file('main.kv')
if __name__ == '__main__':
TestApp().run()
主文件
#:kivy 1.11.0
ScreenManager:
ScreenOne:
id: screen_one
name: 'screen1'
ScreenTwo:
id: screen_two
name: 'screen2'
<ScreenOne>:
BoxLayout:
Button:
text: 'Goto Screen Two'
on_press: root.manager.current = 'screen2'
Button:
text: 'Quit'
<ScreenTwo>:
Button:
id: item_1
text: "Add to cart"
on_press: root.manager.ids.screen_one.update_cart()
输出
推荐阅读
- html - HTML 标签在 swift 代码中无法正常工作
- mongodb - 即使数据存在,Flask PyMongo find_one() 也返回 None
- python - 保存模型时Keras“列表索引超出范围”
- javascript - 具有多部分请求的 Spring Boot 不受支持的媒体类型
- c# - Graphics.DrawString() 上的 AccessViolation
- google-sheets-formula - 谷歌表格:多张表格的动态求和公式
- installation - 防止在 UNIX 中安装期间由于文件权限而导致数据泄漏
- css - React Native 中有没有办法防止文本换行和省略号?
- python - 复杂函数曲线拟合(Python)
- javascript - scrollIntoView 在 Safari 浏览器中未按预期工作