引用从循环中为迭代变量创建的按钮的名称,并在python kivy中使用它

引用从循环中为迭代变量创建的按钮的名称,并在python kivy中使用它,python,kivy,Python,Kivy,我在这里面临一个非常基本的问题。我想创建100个按钮,为了使它们更好地用于循环,并在循环本身中创建按钮名称,以便稍后在程序逻辑中使用它,例如,对于I=1,我想创建Button1,对于I=100,我想创建Button100,但我不确定如何在Python Kivy中做到这一点 这与我们在Linux中使用&variable name和有时使用eval所做的相同。请参阅下面的代码以了解更多信息。评论将在此处描述该问题: from kivy.app import App from kivy.uix.gri

我在这里面临一个非常基本的问题。我想创建100个按钮,为了使它们更好地用于循环,并在循环本身中创建按钮名称,以便稍后在程序逻辑中使用它,例如,对于I=1,我想创建Button1,对于I=100,我想创建Button100,但我不确定如何在Python Kivy中做到这一点

这与我们在Linux中使用&variable name和有时使用eval所做的相同。请参阅下面的代码以了解更多信息。评论将在此处描述该问题:

from kivy.app import App
from kivy.uix.gridlayout import GridLayout
from kivy.uix.button import Button
from kivy.graphics import Color
from kivy.clock import Clock



class RootWidget(GridLayout):
    pass

class MainApp(App):

    def build(self):
        self.parent = GridLayout(cols=6)
        for i in (1,2,3,4,5,6):
            for j in (1,2,3,4,5,6):
                #Want to make self.BName s value as ButtonName%s%s
                self.BName= 'ButtonName%s%s'%(i,j)
                print "Button Name should be ",self.BName
                self.BName = Button(text='%s%s'%(i,j))
                self.parent.add_widget(self.BName)

        Clock.schedule_once(lambda a:self.update(),1)

        return self.parent

    def update(self):
        print "I am update function"
        for child in self.parent.children:
            print child

        #Want to make use ButtonName11 and not BName
        self.BName.text = "hello"
        #self.ButtonName11.text= "hello"

if __name__ == '__main__':
    MainApp().run()

你试过使用这个概念吗

class Foo:
    def __init__(self):
        for i in range(100):
            self.__dict__['Button{}'.format(i)] = Button(text='Button no. {}'.format(i))

>>> foo = Foo()
>>> foo.Button5.text
Button no. 5
>>> foo.Button98.text
Button no. 98

蝎子神的方法应该是可行的,然而,一个更清晰的方法是使用

下面是一些示例代码:

class Foo(object):
    def create_buttons(self):
        for i in range(10):
            setattr(self, 'my_name{}'.format(i), i)

foo = Foo()
foo.my_name3
Traceback (most recent call last):
  File "<console>", line 1, in <module>
AttributeError: 'Foo' object has no attribute 'my_name3'
foo.create_buttons()
foo.my_name3
3
类Foo(对象):
def创建按钮(自):
对于范围(10)内的i:
setattr(self,'my_name{}'。格式(i),i)
foo=foo()
foo.my_name 3
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
AttributeError:'Foo'对象没有属性'my_name3'
foo.create_按钮()
foo.my_name 3
3.

这一种似乎有效。。如果您希望尝试在我在问题中粘贴的代码中创建相同的代码,这是概念,而不是实际需要的代码。你本质上是在问如何动态地向一个对象添加属性,对吗?我无法从你的概念中实现我想要的provided@paarthbatra我对如何添加按钮的理解是,将
button()
的实例分配给变量,然后在调用
add\u小部件()时使用此变量
功能。你的问题是如何创建一个名为for循环生成的变量吗?@paarthbatra这正是我的概念。您可能需要再次阅读我的答案,因为我将第4行更改为分配按钮实例而不是字符串