Zapytanie o zmianę ilości kolumn przy wyświetlaniu obrazków. Taka prosta galeria. Mogę zmienić przy starcie, ale ponowne wywołanie dodaje jedynie kolumny.
Po zwiększeniu z trzech do czterech robi się siedem z czego trzy puste.
Niby czyszczę wszystko w kontenerze poprzez .clear_widgets()
,
ale chyba KV
trzyma stare dane.
class clRecycleRow(BL,clMyImage): # row in thumbnail view
def m_MakeColumns(*d):
sSrcs = ''
sImgs = ''
sIDs = ''
sBckColor = f'''\n\t\tcanvas.before:
Color:
rgba: {glMainBckColor}
Rectangle:
pos: root.pos
size: root.size'''
if d[0] > 2:
for nr in range(3, d[0] +1):
sSrcs = sSrcs + f'''\n\tsSrc{nr}: ""'''
sIDs = sIDs + f'''\n\tnID{nr}: None'''
sImgs = sImgs + f'''\n\tImage:
source: root.sSrc{nr}
nID: root.nID{nr}
size_hint_y: {gnThumbHeightHint}'''
sKV = f'''<clRecycleRow>
canvas.before:
Color:
rgba: {glMainBckColor}
Rectangle:
pos: root.pos
size: root.size
orientation: "horizontal"
size_hint_y: 1
sSrc1: ""
sSrc2: ""'''+sSrcs+f'''
nID1: None
nID2: None'''+sIDs+f'''
Image: {sBckColor}
source: root.sSrc1
nID: root.nID1
size_hint_y: {gnThumbHeightHint}
Image:
source: root.sSrc2
nID: root.nID2
size_hint_y: {gnThumbHeightHint}'''+sImgs
Builder.load_string(sKV)
return None
m_MakeColumns(gnCol)
pass # end of class clRecycleRow
i jest wykorzystana w budowie:
def f_Thumbnails(*d): # generating thumbs in main window
koThumbsLay.clear_widgets()
nRowHeight = Window.size[0] / gnCol
koRecLay = RBL(default_size = (None, nRowHeight), default_size_hint = (1, None),
size_hint = (1, None), orientation = 'vertical',)
koRecLay.bind(minimum_height = koRecLay.setter("height"))
koRecView = RV(size_hint = (1,1), bar_color = (.4,.4,1,1),
bar_inactive_color = glBckColor, bar_width = Window.size[0] / 60)
koRecView.add_widget(koRecLay)
koThumbsLay.add_widget(koRecView)
koRecView.viewclass = 'clRecycleRow' # <---- O TU
lData = []
nElms = len(gdFILES['lElms'])
nRows = math.ceil(nElms/gnCol)
nElm = -1
for row in range(0,nRows):
dTmp = {}
for col in range(0,gnCol):
nElm +=1
if nElm < nElms:
dTmp[f'sSrc{col+1}'] = gdFILES['lElms'][nElm]
dTmp[f'nID{col+1}'] = nElm
else:
dTmp[f'sSrc{col+1}'] = gsPath2black
dTmp[f'nID{col+1}'] = 'None' # ### AAA123
lData.append(dTmp)
koRecView.data = lData
return None
Czy ktoś przerabiał RecycleView
i ma w tym doświadczenie.
Pozdrawiam
Radek Glebicki