KivyMD:无法绑定函数

2024-09-28 05:21:02 发布

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

我正在生成多个按钮,我想绑定每个按钮on_release事件,每个按钮都向分配的函数返回一个唯一的ID,下面是我的全部代码:-

class APP(MDApp):
    class MovieScreen(Screen):
        def on_enter(self, *args):
            pass

    def addMoreMovies(self, imdbid):
        print(imdbid)

    Config.set('graphics', 'width', '450')
    Config.set('graphics', 'height', '700')
    Config.write()

    def build(self):
        self.theme_cls = ThemeManager()
        self.theme_cls.primary_palette = "Green"
        self.theme_cls.theme_style = "Dark"
        screen = Builder.load_string(screen_helper)
        return screen

    def on_start(self):
        amountOfMovies = 10

        movies = getMovie(amountOfMovies)
        for i in range(len(movies[0])):
            image = movies[1][i]
            name = movies[0][i]
            imdbid = movies[2][i]
            tile=SmartTileWithLabel()
            tile.id=str(imdbid)
            tile.bind(on_release=lambda x: APP.addMoreMovies(self,imdbid=imdbid))
            tile.source=str(image)
            tile.text=str(name)
            tile.size=(182,268)
            tile.height='240dp'
            tile.size_hint_y=None
        self.root.ids.grid.add_widget(tile)

代码有点正常,但所有按钮都返回最后分配的ID

我意识到我必须从

tile.bind(on_release=lambda x: APP.addMoreMovies(self,imdbid=imdbid))

tile.bind(on_release=APP.addMoreMovies(self,imdbid=imdbid))

这样每个按钮实例都有自己的功能。但当我运行代码时,我得到以下错误:-


File "kivy\_event.pyx", line 419, in kivy._event.EventDispatcher.bind
 AssertionError: None is not callable

Tags: 代码selfconfigappreleasebindondef
1条回答
网友
1楼 · 发布于 2024-09-28 05:21:02

on_release=需要不带()(也不带参数)的函数名,所以当您按下按钮时,它会使用()来执行它

如果你使用

on_release=APP.addMoreMovies() 

然后在开始时执行函数,它的工作方式如下

result = APP.addMoreMovies() 
bind(on_release=result)

但是APP.addMoreMovies()返回None,所以您有

result = None  # APP.addMoreMovies() 
bind(on_release=result)

这就给了

bind(on_release=None)

所以你的错误是None is not callable


您应该使用lambda保留版本,但可能必须以不同的方式发送imdb

bind(on_release=lambda x, value=imdbid: APP.addMoreMovies(self,imdbid=value))

然后每个按钮都应该使用自己的值

相关问题 更多 >

    热门问题