Использование виджета zzContent.

Информацию (файлы) большого размера (изображения, документы, архивы) оптимально размещать в отдельном файле (например, с именем BIGCONTENT) Структура файла: zzContent5При этом имя загруженного файла хранится в родительской таблице (например, поле ANAME). В описание родительского экрана вносим следующее содержание:

1. В экран добавим пустой виджет для последующего размещения в нем виджета zzContent: zzContent1 2. В фрагменте SETUP вставляем виджет zzContent в экран, и загружаем данные из таблицы BIGCONTENT zzContent2

mem.heap.wco=zzContent()
mem.w.wco.layout().addWidget(mem.heap.wco)

if mem.editMode in ["EDIT"]:
    mem.heap.wco.acontent=gi("bigcontent","parent_uid",mem.s.uid,"content")
    mem.heap.wco.setFileName(mem.s.aname)
if mem.editMode in ["COPY"]:
    mem.heap.wco.acontent=gi("bigcontent","parent_uid",mem.t.r.uid,"content")
    mem.heap.wco.setFileName(mem.s.aname)
mem.heap.wco.butRefresh()

3. В фрагменте VALID размещаем код для сохранения данных в таблицу BIGCONTENT.zzContent3

mem.s.aname=mem.heap.wco.afile
if mem.writeData():
    bc=zzCursor("select 1 as bc from bigcontent where PARENT_UID=%s" % mem.s.uid).r.bc
    if bc=="1":
        uid=gi("bigcontent","parent_uid",mem.s.uid,"uid")
        update("bigcontent",{'CONTENT':mem.heap.wco.acontent,'UID':uid,'PARENT_UID':mem.s.uid})
    else:
        insert("bigcontent",{'CONTENT':mem.heap.wco.acontent,'PARENT_UID':mem.s.uid})
    RETURN=True

4. В фрагменте INIT размещаем код для удаления записи из BIGCONTENT при удалении родительской записи.zzContent4

def afterScDelete(mem):
    def realDo():
        zzCursor("delete from bigcontent where parent_uid=%s" % mem.t.r.uid)
    return realDo
    
mem.afterScDelete=afterScDelete(mem)

5. Код для выгрузки и просмотра содержимого, вставляется в меню для родительской таблицы (mem.t.r).

if mem.t.r.aname!="":
    if glob.glob("temp")==[]:
        try:
            os.mkdir("temp")
        except:
            zzMess(u"Не удалось создать папку для размещения временных файлов")
    if glob.glob("temp")!=[]:
        try:
            up=open("temp/%s" % mem.t.r.aname, "wb")
            acontent=gi("bigcontent","parent_uid",mem.t.r.uid,"content")
#            print acontent
            up.write(acontent.strip().decode("hex"))
            up.close()
            try:
                os.startfile('temp\\%s' % mem.t.r.aname)
            except:
                zzMess(u"Не удалось запустить программу для просмотра файла %s" % mem.t.r.aname)            
        except:
            zzMess(u"""Не удалось создать временный файл <b>%s</b>!!!
                        Возможно файл с таким именем уже открыт в папке с
                        временными файлами <b>%s\\temp</b>""" % (mem.t.r.aname,os.getcwd()))

Короткий код для выгрузки и открытия файла:

zz=zzContent()
zz.acontent=gi("bigcontent","parent_uid",mem.t.r.uid,"content")
zz.afile=gi("bigcontent","parent_uid",mem.t.r.uid,"aname")
zz.contOpen()