Нужно изготовить вот такую редактируемую таблицу:
Это делается вот таким кодом:
browser=sc(None, u"Розничные цены")
browser.addLine("cc",u"Продукт",10,rel=u"ccard@cc@name")
browser.addLine("price",u"Цена",10,cods="A9",pic="999,999,999")
browser.heap.mem=mem
def append(browser):
def realAppend():
for x in browser.zzGridWidget.model().rasx:
browser.zzGridWidget.selectRow(x)
dic={"CC":browser.t.r.cc,"ROZ_PRICE":browser.zzGridWidget.model().rasx[x]}
browser.heap.mem.t.zzDb.setrow("ccard",dic)
browser.heap.mem.refresh()
browser.windows.gridWindow.closeWindow()
return realAppend
browser.addAction(u"Записать в справочник",append(browser),icon="images/ok.png")
cursor=zzCursor("""select cc,roz_price as price
from ccard
where cc in
(
select cc from menui where parent_uid=%s and cc not in (select izd from cnrm)
union
select mat as cc from cnrm where izd in (select cc from menui where parent_uid=%s )
)""" % (mem.t.r.uid,mem.t.r.uid))
#cursor.browse()
browser.setDataSource(cursor)
def ini(browser):
def realIni():
class myDelegate(QItemDelegate):
def createEditor(self, parent, option, index):
editor = zzLineEdit("",pic="999,999,999")
editor.setParent(parent)
editor.autoFocus=False
editor.setMaximumWidth(99999)
return editor
def setEditorData(self, le, index):
value =u"%s" % index.model().data(index, Qt.DisplayRole).toString()
le.setText(value)
def setModelData(self, le, model, index):
value = le.text()
model.setData(index, QVariant(value), Qt.EditRole)
def updateEditorGeometry(self, editor, option, index):
editor.setGeometry(option.rect)
class editModel(pentadb.zzModel):
def __init__(self,zzModel):
pentadb.zzModel.__init__(self,zzModel)
self.zzModel=zzModel
self.rasx={}
def setData(self, index, data, role):
text=data.toString()
self.rasx[index.row()]=text
# if num(text)==0:
# del self.rasx[index.row()]
return True
def data(self,index, role=Qt.DisplayRole):
curcol=self.zzModel.columns[index.column()]
if role==Qt.DisplayRole and curcol=='price':
if index.row() in self.rasx:
return QVariant(u"%s" % tran(self.rasx[index.row()],"999,999,999"))
else:
return self.zzModel.data(index,role)
elif role == Qt.BackgroundRole and curcol=='price':
return QVariant(QColor("lightgreen"))
else:
return self.zzModel.data(index,role)
def flags(self,index):
curcol=self.zzModel.columns[index.column()]
if curcol=='price':
return Qt.ItemIsDragEnabled | Qt.ItemIsSelectable | Qt.ItemIsDropEnabled | Qt.ItemIsEnabled |Qt.ItemIsEditable
else:
return Qt.ItemIsDragEnabled | Qt.ItemIsSelectable | Qt.ItemIsDropEnabled | Qt.ItemIsEnabled
browser.zzGridWidget.grid.setModel(editModel(browser.zzGridWidget.grid.model()))
browser.zzGridWidget.grid.setItemDelegate(myDelegate())
browser.zzGridWidget.grid.selectRow(0)
return realIni
browser.initfunc=ini(browser)
browser.runBrowse()
