如何在不影响“自我”的情况下传递参数

2024-04-29 00:12:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经用这个代码工作了好几天了

我不能让它工作,我的目标是将一个参数从一个不同类的函数传递到另一个不同类的函数,而不影响“自身”

请参阅示例代码

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'

当我为self-like ThisScreen.getters(self=True, datas=['5','3'])的缺失位置参数添加一个值时,它会给我不同的错误,并且我无法在getters()函数下访问/调用其他元素

     self.ids.gettersBox.text = f"There is {datas[0]} Apple's and {datas[0]} Banana's"
 AttributeError: 'bool' object has no attribute 'ids'

希望你能帮助我用这个简单的代码

非常感谢


Tags: 函数代码textfromimportselfidsdef
1条回答
网友
1楼 · 发布于 2024-04-29 00:12:16

你有两个选择

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


相关问题 更多 >