def showSchema(self, table): """ Public slot to show the schema of a table. @param table name of the table to be shown (string) """ rec = self.connections.currentDatabase().record(table) model = QStandardItemModel(self.table) model.insertRows(0, rec.count()) model.insertColumns(0, 7) model.setHeaderData(0, Qt.Horizontal, "Fieldname") model.setHeaderData(1, Qt.Horizontal, "Type") model.setHeaderData(2, Qt.Horizontal, "Length") model.setHeaderData(3, Qt.Horizontal, "Precision") model.setHeaderData(4, Qt.Horizontal, "Required") model.setHeaderData(5, Qt.Horizontal, "Auto Value") model.setHeaderData(6, Qt.Horizontal, "Default Value") for i in range(rec.count()): fld = rec.field(i) model.setData(model.index(i, 0), fld.name()) if fld.typeID() == -1: model.setData(model.index(i, 1), QVariant.typeToName(fld.type())) else: model.setData( model.index(i, 1), "{0} ({1})".format(QVariant.typeToName(fld.type()), fld.typeID())) if fld.length() < 0: model.setData(model.index(i, 2), "?") else: model.setData(model.index(i, 2), fld.length()) if fld.precision() < 0: model.setData(model.index(i, 3), "?") else: model.setData(model.index(i, 3), fld.precision()) if fld.requiredStatus() == -1: model.setData(model.index(i, 4), "?") else: model.setData(model.index(i, 4), bool(fld.requiredStatus())) model.setData(model.index(i, 5), fld.isAutoValue()) model.setData(model.index(i, 6), fld.defaultValue()) self.table.setModel(model) self.table.setEditTriggers(QAbstractItemView.NoEditTriggers) self.table.resizeColumnsToContents() self.updateActions()
def showSchema(self, table): """ Public slot to show the schema of a table. @param table name of the table to be shown (string) """ rec = self.connections.currentDatabase().record(table) model = QStandardItemModel(self.table) model.insertRows(0, rec.count()) model.insertColumns(0, 7) model.setHeaderData(0, Qt.Horizontal, "Fieldname") model.setHeaderData(1, Qt.Horizontal, "Type") model.setHeaderData(2, Qt.Horizontal, "Length") model.setHeaderData(3, Qt.Horizontal, "Precision") model.setHeaderData(4, Qt.Horizontal, "Required") model.setHeaderData(5, Qt.Horizontal, "Auto Value") model.setHeaderData(6, Qt.Horizontal, "Default Value") for i in range(rec.count()): fld = rec.field(i) model.setData(model.index(i, 0), fld.name()) if fld.typeID() == -1: model.setData(model.index(i, 1), QVariant.typeToName(fld.type())) else: model.setData( model.index(i, 1), "{0} ({1})".format( QVariant.typeToName(fld.type()), fld.typeID())) if fld.length() < 0: model.setData(model.index(i, 2), "?") else: model.setData(model.index(i, 2), fld.length()) if fld.precision() < 0: model.setData(model.index(i, 3), "?") else: model.setData(model.index(i, 3), fld.precision()) if fld.requiredStatus() == -1: model.setData(model.index(i, 4), "?") else: model.setData(model.index(i, 4), bool(fld.requiredStatus())) model.setData(model.index(i, 5), fld.isAutoValue()) model.setData(model.index(i, 6), fld.defaultValue()) self.table.setModel(model) self.table.setEditTriggers(QAbstractItemView.NoEditTriggers) self.table.resizeColumnsToContents() self.updateActions()
class ReaderExcelThread(QThread): standarModel_signal = pyqtSignal(QStandardItemModel) # sqlTableModel_signal = pyqtSignal(QSqlTableModel) progressRate_signal = pyqtSignal(str) finished_signal = pyqtSignal() # ''' # 读取表格的方式分为两种: # 1.读取后直接使用,即直接设置并返回为QStandardItemModel # 2.读取后放到缓存数据库,从数据库中取数据,返回QSqlTableModel # ''' def __init__(self, file_name, operate_way=1): super().__init__() self.file_name = file_name self.operate_way = operate_way self.model = QStandardItemModel() def run(self): # 这里读取数据返回列表便于表格中数据的更新 self.progressRate_signal.emit("数据载入准备中...") data_list = read_excel(self.file_name) if data_list == -1: return print('start work!') cnt = len(data_list) for i, rows in enumerate(data_list): row = [QStandardItem(str(cell)) for cell in rows] self.model.appendRow(row) percent = int(i / cnt * 100 + 0.5) self.progressRate_signal.emit("数据载入进度:{}%".format(percent)) #自动填满,这样更加美观(不过增加了后期数据处理难度!) while self.model.rowCount() < 22: self.model.insertRows(self.model.rowCount(), 1) while self.model.columnCount() < 15: self.model.insertColumns(self.model.columnCount(), 1) #数据加载完成 self.progressRate_signal.emit("数据载入进度:100%") self.standarModel_signal.emit(self.model) print('send finised') self.finished_signal.emit()