| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- '''
- @author: olivier.massot
- '''
- import csv
- import sys
- from PyQt5 import uic
- from PyQt5.Qt import QMainWindow, QApplication, QMessageBox, QStandardItemModel, \
- QStandardItem, Qt, QFileDialog
- from path import Path
- Ui_window, _ = uic.loadUiType(Path(__file__).parent / 'tsv_editor.ui')
- csv.register_dialect('tsv', delimiter='\t', quotechar='', quoting=csv.QUOTE_NONE)
- def exec_(filename=''):
- app = QApplication(sys.argv)
- SYS_HOOK = sys.excepthook
- def error_handler(typ, value, trace):
- while QApplication.overrideCursor():
- QApplication.restoreOverrideCursor()
- QMessageBox.critical(iface, typ.__name__, "{}".format(value))
- SYS_HOOK(typ, value, trace)
- sys.excepthook = error_handler
- if not filename:
- filename, _ = QFileDialog.getOpenFileName(None, "Selectionner un fichier TSV", ".", "Tsv Files (*.tsv *.csv)")
- iface = MainWindow(filename)
- iface.show()
- r = app.exec_()
- return r
- class MainWindow(QMainWindow):
- def __init__(self, csvpath):
- super (MainWindow, self).__init__()
- self.csvpath = csvpath
- self.createWidgets()
- def createWidgets(self):
- self.ui = Ui_window()
- self.ui.setupUi(self)
- self.ui.btn_cancel.clicked.connect(self.cancel)
- self.ui.btn_ok.clicked.connect(self.ok)
- self.model = QStandardItemModel(self)
- self.ui.tbl_data.setModel(self.model)
- self.ui.lbl_path.setText(self.csvpath)
- with open(self.csvpath, newline='') as csvfile:
- reader = csv.reader(csvfile, 'tsv')
- self.headers = next(reader)
- self.model.setHorizontalHeaderLabels(self.headers)
- for row in reader:
- items = [ QStandardItem(field) for field in row ]
- self.model.appendRow(items)
- def ok(self):
- with open(self.csvpath, "w", newline='') as fileOutput:
- writer = csv.writer(fileOutput, "tsv")
- writer.writerow(self.headers)
- for rowNumber in range(self.model.rowCount()):
- fields = [self.model.data(self.model.index(rowNumber, columnNumber), Qt.DisplayRole)
- for columnNumber in range(self.model.columnCount())]
- writer.writerow(fields)
- self.close()
- def cancel(self):
- self.close()
- if __name__ == '__main__':
- exec_()
|