Python 3.x 如何将按钮绑定到在for循环中创建的屏幕?

Python 3.x 如何将按钮绑定到在for循环中创建的屏幕?,python-3.x,kivy,kivy-language,Python 3.x,Kivy,Kivy Language,我想创建一组按钮,用于控制在同一for loop中创建的当前屏幕 我的.py文件 class Profiles(Screen): #create button and screens based on items in acc_abr def create_butt(self): for i in acc_abr: self.ids.sm.add_widget(Screen(name = i)) self.ids.

我想创建一组按钮,用于控制在同一
for loop
中创建的
当前
屏幕

我的.py文件

class Profiles(Screen):
    #create button and screens based on items in acc_abr 
    def create_butt(self):
        for i in acc_abr:
            self.ids.sm.add_widget(Screen(name = i))
            self.ids.pro.add_widget(Button(text=i, id=i, on_press = self.switching_function(screename=i)))

    #set current screen
    def switching_function(self, screename):
        self.ids.sm.current = screename
我的.kv文件

<Profiles>:
    name: "prof"
    on_enter: self.create_butt()
    BoxLayout:
        orientation: "vertical"
        GridLayout:
            rows:1
            id: pro
            size_hint_y: .16
        BoxLayout:
            AccManagement:
                id: sm
:
姓名:“教授”
输入:self.create\u butt()
盒子布局:
方向:“垂直”
网格布局:
行数:1
id:pro
尺寸提示:16
盒子布局:
账户管理:
id:sm
create\u butt
功能下,我为
acc\u abr
中的每个项目添加了一个屏幕和按钮(到适当的位置)

问题是,当我尝试绑定上的
时,按
切换功能
。出于某种原因,当我运行kivy应用程序并调用
Profile
时,我得到了
AssertionError:None是不可调用的

  • 什么使这成为一个有效的错误
  • 如何将按钮正确绑定到for循环中的屏幕
  • 在.kv文件中,一个按钮带有一个在屏幕管理器(sm)中更改当前屏幕的
    on\u press
    命令,它看起来像这样:
    on\u press:sm.current=“screen1”
    ,所以我的最后一个问题是,如何在python文件中编写它?不起作用,但是,
    按钮(按=(self.ids.sm.current=i)

  • 要在
    .py
    文件中使用
    ,并传递参数,需要使用lambda函数或
    functools.partial

    from functools import partial
    ...
    something.add_widget(Button(on_press = partial(self.switching_function, i))
    ...
    

    这是因为on_press
    只需要调用函数的名称(注意在on_press回调中调用函数时没有括号)。

    什么是
    AccManagement
    ?@eyllanesc它是一个屏幕管理器