我有以下代码:
from functools import partial
class DishesScreen(Screen):
def on_pre_enter(self):
Window.size = (800,800)
for i in range(10):
self.layout.add_widget(AsyncImage(source='<url>',allow_stretch=True,size_hint_y=None,size_hint_x=None))
dish_widget = self.get_params_layout()
dish_widget.bind(on_touch_down=partial(self.move,data[i]))
self.layout.add_widget(dish_widget)
def get_params_layout(self):
params_layout = BoxLayout(orientation='vertical',spacing=10,padding=10)
return params_layout
def move(self,*args):
# some actions here
pass
我想做的是使用特定于move()
列表中每个元素的参数调用BoxLayout
函数。
如果我单击第二个元素-我希望使用特定于第二个元素的参数执行move()
函数,如果我单击第七个元素-我希望执行特定于参数的move()
函数用于第7个元素,等等。
相反,无论我单击哪个元素,move()
函数每次从最后一个元素开始到第一个元素都使用该元素的参数时,都会执行10次。
我认为这是因为我在dish_widget
:layout
中添加了self.layout.add_widget(dish_widget)
。这意味着当我单击某个地方时,实际上我单击了layout
,并且程序执行了附加到move()
的所有10个layout
函数。但是无法弄清楚如何改变这种行为。我只需要调用move()
函数-唯一的一个附加到我在列表中单击的元素(BoxLayout
)上。有人可以帮忙吗?
更新:
这是标记:
<DishesScreen>:
layout: layout
ScrollView:
do_scroll_x: False
do_scroll_y: True
GridLayout:
id: layout
cols:2
size_hint: 1,None
height: self.minimum_height
spacing: 5,5
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。