如何在不影响 "self" 的情况下传递参数
How to Pass args without affecting "self"
我已经使用这段代码几天了。
我无法让它工作,我的目标是将来自不同 CLASS 的函数的参数传递给不同 CLASS 中的另一个函数而不影响 'self '
请查看示例代码。
PY 代码:
`
from kivy.app import App
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.lang import Builder
from kivy.uix.button import Button
#Custom Button
class PassdataButton(Button):
def on_release(self):
ThisScreen.getters(datas=['5','3'])
class ThisScreen(Screen):
def getters(self,datas):
self.ids.gettersBox.text = f"There is {datas[0]} Apple's and {datas[0]} Banana's"
class SM(ScreenManager):
pass
kv_file = Builder.load_file('getData.kv')
class projectApps(App):
def build(self):
return kv_file
if __name__ == "__main__":
projectApps().run()
`
KV 代码:
SM:
ThisScreen:
name: 'ThisScreen'
<ThisScreen>:
canvas.before:
canvas:
Rectangle:
size: self.size
source: 'im-502378444.jpg'
BoxLayout:
padding: 10
orientation: 'vertical'
TextInput:
id: gettersBox
BoxLayout:
size_hint_y: .3
orientation: 'horizontal'
Button:
text: 'GetterButton'
on_release: root.getters(datas = 'this data is from GetterButton')
#CustomButton
PassdataButton:
text: "Apple's & Banana's"
每次我 运行 代码并单击我创建的自定义按钮时,都会出现错误
ThisScreen.getters(datas=['5','3'])
TypeError: getters() missing 1 required positional argument: 'self'
当我为缺少的位置参数添加一个值时,例如 ThisScreen.getters(self=True, datas=['5','3'])
它给了我不同的错误,我不能 access/call getters() 函数下的其他元素。
self.ids.gettersBox.text = f"There is {datas[0]} Apple's and {datas[0]} Banana's"
AttributeError: 'bool' object has no attribute 'ids'
希望你能帮我解决这个简单的代码。
非常感谢!
你有两个选择。
1. 您可以直接从您的 kv 文件传递它。由于您已经在 ThisScreen
屏幕上,您可以只删除 python 中的 on_relase
方法并从根目录调用 .kv
中的函数,如下所示:
PassdataButton:
text: "Apple's & Banana's"
on_release: root.getters(datas=['5', '3'])
2. 或者如果你想为此使用 python,你将必须获得你的 运行 应用程序,屏幕管理器,然后跳转到具有所需功能的屏幕,只有在那里你才能调用你的 getter:
class PassdataButton(Button):
def on_release(self):
App.get_running_app().root.get_screen('ThisScreen').getters(datas=['5', '3'])
# App -> App instance
# get_running_app() -> current running
# root -> Screen Manager
# get_screen('ThisScreen') -> Desired screen
我已经使用这段代码几天了。
我无法让它工作,我的目标是将来自不同 CLASS 的函数的参数传递给不同 CLASS 中的另一个函数而不影响 'self '
请查看示例代码。
PY 代码:
`
from kivy.app import App
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.lang import Builder
from kivy.uix.button import Button
#Custom Button
class PassdataButton(Button):
def on_release(self):
ThisScreen.getters(datas=['5','3'])
class ThisScreen(Screen):
def getters(self,datas):
self.ids.gettersBox.text = f"There is {datas[0]} Apple's and {datas[0]} Banana's"
class SM(ScreenManager):
pass
kv_file = Builder.load_file('getData.kv')
class projectApps(App):
def build(self):
return kv_file
if __name__ == "__main__":
projectApps().run()
`
KV 代码:
SM:
ThisScreen:
name: 'ThisScreen'
<ThisScreen>:
canvas.before:
canvas:
Rectangle:
size: self.size
source: 'im-502378444.jpg'
BoxLayout:
padding: 10
orientation: 'vertical'
TextInput:
id: gettersBox
BoxLayout:
size_hint_y: .3
orientation: 'horizontal'
Button:
text: 'GetterButton'
on_release: root.getters(datas = 'this data is from GetterButton')
#CustomButton
PassdataButton:
text: "Apple's & Banana's"
每次我 运行 代码并单击我创建的自定义按钮时,都会出现错误
ThisScreen.getters(datas=['5','3'])
TypeError: getters() missing 1 required positional argument: 'self'
当我为缺少的位置参数添加一个值时,例如 ThisScreen.getters(self=True, datas=['5','3'])
它给了我不同的错误,我不能 access/call getters() 函数下的其他元素。
self.ids.gettersBox.text = f"There is {datas[0]} Apple's and {datas[0]} Banana's"
AttributeError: 'bool' object has no attribute 'ids'
希望你能帮我解决这个简单的代码。
非常感谢!
你有两个选择。
1. 您可以直接从您的 kv 文件传递它。由于您已经在 ThisScreen
屏幕上,您可以只删除 python 中的 on_relase
方法并从根目录调用 .kv
中的函数,如下所示:
PassdataButton:
text: "Apple's & Banana's"
on_release: root.getters(datas=['5', '3'])
2. 或者如果你想为此使用 python,你将必须获得你的 运行 应用程序,屏幕管理器,然后跳转到具有所需功能的屏幕,只有在那里你才能调用你的 getter:
class PassdataButton(Button):
def on_release(self):
App.get_running_app().root.get_screen('ThisScreen').getters(datas=['5', '3'])
# App -> App instance
# get_running_app() -> current running
# root -> Screen Manager
# get_screen('ThisScreen') -> Desired screen