У меня есть вид прокрутки с дочерним элементом GridLayout, и в gridlayout добавлено множество меток различной высоты. У меня вопрос: как узнать, какой виджет отображается на экране в любое время? Причина в том, что я хочу показать детали самой верхней видимой метки в другой части экрана (чтобы показать, какой виджет сейчас находится вверху видимой области прокрутки). Например, если в сетке 50 меток, при прокрутке на экране может отображаться 4 метки (из-за размера прокрутки) для примеров 23, 24, 25 и 26. В этом случае, как узнать метку 23, отображается на верхняя часть видимой области прокрутки?
ОБНОВЛЕНО:
пример кода, показывающий объяснение выше
from kivy.lang import Builder
from kivymd.app import MDApp
from kivymd.uix.label import MDLabel
from kivymd.uix.behaviors.focus_behavior import ButtonBehavior
KV = '''
BoxLayout:
orientation: 'vertical'
MDLabel:
id : lbl_id
text: 'This should show the top label in scrollview below(red canvas) dynamically as we scroll'
size_hint : (1,None)
height : self.texture_size[1]
MDSeparator:
ScrollView:
id : scroll_id
size_hint_y:None
height : root.height - (lbl_id.height)
do_scroll_x: False
do_scroll_y: True
scroll_type: ['bars', 'content']
canvas:
Color:
rgba: [1,0,0,0.5]
Rectangle:
pos: self.pos[0],self.height-100
size: self.size
GridLayout:
id:grid_id
cols: 1
height: self.minimum_height
size_hint_y: None
'''
class MyMDLabel(ButtonBehavior, MDLabel ):
pass
class Example(MDApp):
def build(self):
self.res=Builder.load_string(KV)
for i in range(20):
lbl = MyMDLabel(text='pressme Label-%d ' % (i), size_hint=(1, None) )
lbl.bind(on_release=self.update_lbl)
self.res.ids.grid_id.add_widget(lbl)
return self.res
def update_lbl(self,instance):
content='\nThis should show the top label in scrollview below(red canvas) dynamically as we scroll'
self.res.ids.lbl_id.text=instance.text + content
Example().run()