Форум сайта python.su
0
def main():
app = QApplication(sys.argv)
w = MyWindow()
w.show()
sys.exit(app.exec_())
class MyWindow(QWidget):
def __init__(self, *args):
QWidget.__init__(self, *args)
##print (self.cols)
self.setWindowTitle ("Таблица Формуляров")
self.resize (700,700)
label = QtGui.QLabel("<center> Количество </center>")
spin = QSpinBox()
def k() :
print(spin.value())
tableModel._setRowsCount(6)
print('done')
tableModel = MyTableModel(self)
tableView = QTableView()
tableView.setModel(tableModel)
layout = QVBoxLayout(self)
layout.addWidget(label)
layout.addWidget(spin)
layout.addWidget(tableView)
tableView.setColumnWidth(1, 80)
tableView.horizontalHeader().setResizeMode(QHeaderView.Stretch)
tableView.horizontalHeader().setMovable (True)
spin.valueChanged.connect(k)
print(tableModel.forms)
self.setLayout(layout)
tableView.setColumnHidden(1,True)
tableModel._setRowsCount(6)
class MyTableModel(QAbstractTableModel):
def __init__(self, parent = None, *args):
QAbstractTableModel.__init__(self, parent, *args)
self.cols = self._getDescr(self._inputCfg())
self.forms = self._inputForms()
self.tableData = self._createTableData()
print(self.forms)
def rowCount(self, parent):
try :
return len(self.formsCount)
except AttributeError :
return 0
def columnCount(self, parent):
return len(self._inputCfg())
def data(self, index, role):
if not index.isValid():
return None
elif role != Qt.DisplayRole:
return None
return (self.tableData[index.row()][index.column()])
def headerData(self, section, orientation, role):
if orientation == QtCore.Qt.Horizontal and role == QtCore.Qt.DisplayRole:
header = self.cols[section]
return header
##if orientation == QtCore.Qt.Vertical and role == QtCore.Qt.DisplayRole:
## return ("%s" % str(section + 1))
## Получает список параметров , которые необходимо отобразить в таблице.
def _inputCfg (self,pathCfg='form_table_cols.json'):
# FIXME: Файл должен закрываться.
fOpen = open(pathCfg, 'r', encoding='utf-8')
cols = eval(fOpen.read())
return cols
## Получает формуляры
def _inputForms (self):
file = open('testdata\\form_example', 'rb')
x = file.read()
mathModel = formconv.FormConv()
b = mathModel.binForms2Forms(x) # FIXME: что означают имена x и b?
return b
## Получает список имён заголовков колонок в таблице.
def _getDescr (self,cols):
mathModel = formconv.FormConv()
colHeader =[]
for param in self._inputCfg() :
lbl = formconv.FormConv.getParamLbl(mathModel,param)
# FIXME: Единицы измерения переводятся на английский как units.
unit = formconv.FormConv.getParamUnits(mathModel,param)
# FIXME: colHeader.append(lbl + ', ' + units)
colHeader.append(self._createColHeader(lbl,unit))
return colHeader
# FIXME: Лишний метод.
def _createColHeader (self,lbl,unit):
print (unit)
if unit == None:
return lbl
tmpStr = lbl + ' ' + unit
return tmpStr
def _createTableData (self):
formsTable = []
for _forms in self.forms:
form = []
for descr in self._inputCfg() :
form.append(_forms.get(descr))
formsTable.append(form)
return formsTable
def _setRowsCount (self,n=None):
self.formsCount = self.forms[:n]
main()
tableModel._setRowsCount(6)
spin.valueChanged.connect(k)
def k() :
print(spin.value())
tableModel._setRowsCount(6)
print('done')
Офлайн
0
Вообще какой принцип , таблица должна обновляться сама или где-то нужен метод update или что-то в этом роде ?
Офлайн
186
Само ничего не бывает. Перед изменением данных в модели нужно вызывать self.beginResetModel() , а после self.endResetModel().
Офлайн
0
Помогло )) Спасибо.
Но вот есть такой вопрос , когда я делаю self.beginResetModel() , модель начинает строится с самой первой строчки init ?
Я так понял что нет , он обновляет data, rowCount, columnCount .
Отредактировано sameway (Фев. 25, 2014 16:11:41)
Офлайн