最近几天,我花了很多时间在制作我想在与10英寸触摸屏相连的树莓派上实现的应用程序。我正在为德国的一个学生住房协会制作此应用程序。 因此,我们的想法是将带有触摸屏的树莓派安装在普通冰箱的上方/旁边(尚不确定)。冰箱仅容纳0.5L瓶装饮料,每瓶价格为0.80欧元至1.10€。我们不会立即付款,我们只是将完善的商品写下来。 我想要做的是一个带有kivy库的应用程序,在其中可以单击我的名字,喝一杯,该应用程序将节省我的消费,我已经支付的费用并将这些信息保存在CSV文件中。为此,我必须使用kivy动态生成许多按钮(列表中人的名字)。但是现在看来,当它们被按下时,我无法为其分配任何功能。更确切地说,每个按钮的索引似乎没有任何作用。我真的不知道如何解释它,所以让我们看一些代码:
from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.gridlayout import GridLayout
class grid(App):
button = [0 for i in range(25)]
def build(self):
main = GridLayout(cols = 5)
for i in range(25):
self.button[i] = Button(text = str(i))
self.button[i].bind(on_release =lambda x: grid.printString(str(i)))
main.add_widget(self.button[i])
return main
def printString(string):
print(string)
app = grid()
app.run()
所以这不是我的实际代码,这是一个说明问题的示例。对于每个单击的按钮,我得到的输出是24。我想要的是每个按钮在button []列表中打印出自己的索引。我一直在努力进行数小时的工作,但没有发现任何有效的方法。如果有人知道如何正确分配这些按钮行为,我将非常感谢您的投入。
答案 0 :(得分:0)
id
from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.gridlayout import GridLayout
class CustomButton(Button):
def on_touch_down(self, touch):
if self.collide_point(*touch.pos):
print("Button.id=", self.id)
return True
return False
class grid(App):
def build(self):
main = GridLayout(cols=5)
for i in range(25):
button = CustomButton(id=str(i), text=str(i))
main.add_widget(button)
return main
app = grid()
app.run()