Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python kivy按钮中的on_press事件未按预期工作_Python_Kivy - Fatal编程技术网

Python kivy按钮中的on_press事件未按预期工作

Python kivy按钮中的on_press事件未按预期工作,python,kivy,Python,Kivy,下面是我代码中的一个小片段 问题:-当加载屏幕“X”并传递一些参数时,调用get函数。在get中,我正在创建带有一些名称的按钮,并在按下按钮事件时进行分配。但问题在于,按下事件会自动调用,无需按下按钮,下一个屏幕进入画面 def get(self, service): """ some code""" but = Button(size_hint=(1, None)) but.text = str(i['name'][

下面是我代码中的一个小片段

问题:-当加载屏幕“X”并传递一些参数时,调用get函数。在get中,我正在创建带有一些名称的按钮,并在按下按钮事件时进行分配。但问题在于,按下事件会自动调用,无需按下按钮,下一个屏幕进入画面

   def get(self, service):
            """ some code"""
            but = Button(size_hint=(1, None))
            but.text = str(i['name'][0][:10])
            but.bind(on_press = self.change_screen(dict))
            print "adding widget to home  "  + str(but)
            self.home_box.add_widget(but)

    def change_screen(self, dict):
        self.screen_manager.current = 'Per_settings'
知道发生了什么事吗

but.bind(on_press = self.change_screen(dict))
您正在调用self.change\u screen(dict)-这是函数调用的正常python语法,bind方法甚至不知道它,只传递调用的结果

您必须传递函数本身。您可以使用functools.partial自动包含参数,但请注意,bind也会传递额外的参数

from functools import partial
but.bind(on_press=partial(self.change_screen, dict))

谢谢@恶劣天气很好,想从你身上吸取教训