Created
December 30, 2017 19:14
-
-
Save eyllanesc/7f03eb1ef1f9577cdcf988e569eb6f65 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from PyQt5.QtWidgets import * | |
from PyQt5.QtCore import * | |
from PyQt5.QtGui import * | |
from PyQt5.QtSql import * | |
import sys | |
class ImportFilter (QDialog): | |
def __init__(self): | |
super().__init__() | |
self.initUI() | |
def initUI(self): | |
print("Welcome to StandardDialog") | |
# Load the Window | |
#self.ui = uic.loadUi("ImportFilter.ui",self) | |
#self.ui.setModal(True) | |
self.buttonBox = QDialogButtonBox() | |
self.tableView_typeOfValues = QTableView() | |
layout = QVBoxLayout() | |
layout.addWidget(self.buttonBox) | |
layout.addWidget(self.tableView_typeOfValues) | |
self.setLayout(layout) | |
# Init Environmment | |
self.db = createConnection() | |
# create Models | |
self.setupModel() | |
#setup Views | |
self.setupView() | |
# connect Signals | |
self.buttonBox.clicked.connect(self.pushButton_Box_clicked) | |
self.show() | |
print("<- initUI") | |
def setupView(self): | |
print("-> setupView") | |
self.tableView_typeOfValues.setModel(self.tableView_typeOfValues_Model) | |
self.tableView_typeOfValues.setColumnWidth(0,10) | |
self.tableView_typeOfValues.setColumnWidth(1,130) | |
self.tableView_typeOfValues.setColumnWidth(2,130) | |
self.tableView_typeOfValues.setColumnWidth(3,60) | |
self.tableView_typeOfValues.setColumnWidth(4,60) | |
self.tableView_typeOfValues.setColumnWidth(5,60) | |
self.tableView_typeOfValues.setColumnWidth(6,60) | |
self.tableView_typeOfValues.hideColumn(0) | |
self.tableView_typeOfValues.hideColumn(3) | |
print("<- setupView") | |
for col in self.tableView_typeOfValues_Model.booleanSet: | |
self.tableView_typeOfValues.setItemDelegateForColumn(col, ReadOnlyDelegate(self)) | |
def setupModel(self): | |
print("-> setupModel") | |
# own model | |
self.tableView_typeOfValues_Model = ImportSqlTableModel() | |
print(" tables:", self.db.tables()) | |
print(' Before .setTable("typeOfValue") and select()') | |
#self.tableView_typeOfValues_Model.info() | |
self.tableView_typeOfValues_Model.setTable("typeOfValue") | |
self.tableView_typeOfValues_Model.setEditStrategy(QSqlTableModel.OnFieldChange) | |
self.tableView_typeOfValues_Model.select() | |
print(' After .setTable("typeOfValue") and select()') | |
self.tableView_typeOfValues_Model.info() | |
self.headerData() | |
print(" Table:",self.tableView_typeOfValues_Model.tableName()) | |
print(" count:",self.tableView_typeOfValues_Model.rowCount()) | |
self.tableView_typeOfValues_Model.info() | |
print("<- setupModel") | |
def setupModelQRY(self): | |
print("-> setupModel with Query") | |
# works so far | |
#self.tableView_typeOfValues_Model = QSqlTableModel() # edit but no checkboxes | |
self.tableView_typeOfValues_Model = ImportSqlTableModel(self.db) # no edit | |
# SET query | |
qry = QSqlQuery(self.db) | |
sql = "SELECT ID, name, unit, source, Import, ImportIfZero, visible FROM typeOfValue" | |
qry.prepare(sql) | |
qry.exec_(sql) | |
self.tableView_typeOfValues_Model.setQuery(qry) | |
self.tableView_typeOfValues_Model.select() | |
print(" Filter:",self.tableView_typeOfValues_Model.filter()) | |
print(" SELECT:", self.tableView_typeOfValues_Model.selectStatement()) | |
self.tableView_typeOfValues_Model.setEditStrategy(QSqlTableModel.OnFieldChange) | |
print("<- setupModel") | |
def headerData(self): | |
print("-> headerData") | |
self.tableView_typeOfValues_Model.setHeaderData(0,Qt.Horizontal, "ID") | |
self.tableView_typeOfValues_Model.setHeaderData(1,Qt.Horizontal, "name") | |
self.tableView_typeOfValues_Model.setHeaderData(2,Qt.Horizontal, "unit") | |
self.tableView_typeOfValues_Model.setHeaderData(3,Qt.Horizontal, "source") | |
self.tableView_typeOfValues_Model.setHeaderData(4,Qt.Horizontal, "Import") | |
self.tableView_typeOfValues_Model.setHeaderData(5,Qt.Horizontal, "ImportIfZero") | |
self.tableView_typeOfValues_Model.setHeaderData(6,Qt.Horizontal, "visible") | |
print("<- headerData") | |
################################################################################################### | |
# functions | |
################################################################################################### | |
def pushButton_Box_clicked(self,signal): | |
print("okButtonClicked") | |
print("buttonBox_clicked",signal) | |
self.tableView_typeOfValues_Model.submitAll() | |
self.exitcode = "ok, but not implemented" | |
sys.exit() | |
def returnCode(self): | |
return self.exitcode | |
####################################################################################################################### | |
# C L A S S | |
####################################################################################################################### | |
class ImportSqlTableModel(QSqlTableModel): | |
def __init__(self, *args, **kwargs): | |
super(ImportSqlTableModel, self).__init__(*args, **kwargs) | |
self.booleanSet = [4, 5, 6] # column with checkboxes | |
self.readOnlySet = [1] # columns which must not be changed | |
self.setTable("typeOfValue") | |
self.setEditStrategy(QSqlTableModel.OnFieldChange) | |
self.select() | |
def data(self, index, role=Qt.DisplayRole): | |
value = super(ImportSqlTableModel, self).data(index) | |
if index.column() in self.booleanSet: | |
if role == Qt.CheckStateRole: | |
return Qt.Unchecked if value == 2 else Qt.Checked | |
else: | |
return QVariant() | |
return QSqlTableModel.data(self, index, role) | |
def setData(self, index, value, role=Qt.EditRole): | |
if not index.isValid(): | |
return False | |
if index.column() in self.booleanSet: | |
if role == Qt.CheckStateRole: | |
val = 2 if value == Qt.Unchecked else 0 | |
return QSqlTableModel.setData(self, index, val, Qt.EditRole) | |
else: | |
return False | |
else: | |
return QSqlTableModel.setData(self, index, value, role) | |
def flags(self, index): | |
if not index.isValid(): | |
return Qt.NoItemFlags | |
if index.column() in self.booleanSet: | |
return Qt.ItemIsUserCheckable | Qt.ItemIsEnabled | Qt.ItemIsEditable | |
elif index.column() in self.readOnlySet: | |
return Qt.ItemIsSelectable | Qt.ItemIsEnabled | |
else: | |
return QSqlTableModel.flags(self, index) | |
def info(self): | |
print("-> info") | |
print(" ImportSqlTableModel tables inside :", self.database().tables()) | |
print(" ImportSqlTableModel self.db :", self.database()) | |
print(" ImportSqlTableModel self.Table :", self.tableName()) | |
print(" ImportSqlTableModel self.rowCount :", self.rowCount()) | |
print(" ImportSqlTableModel self.lastEror :", self.lastError().text()) | |
print("<- info") | |
class ReadOnlyDelegate(QItemDelegate): | |
def createEditor(self, parent, option, index): | |
lb = QLabel(parent) | |
return lb | |
####################################################################################################################### | |
# D E M O F U N C T I O N | |
####################################################################################################################### | |
def createConnection(): | |
db = QSqlDatabase.addDatabase('QSQLITE') | |
db.setDatabaseName('memory') | |
if not db.open(): | |
QMessageBox.critical(None, qApp.tr("Cannot open database"), | |
qApp.tr("Unable to establish a database connection.\n" | |
"This example needs SQLite support. Please read " | |
"the Qt SQL driver documentation for information " | |
"how to build it.\n\n" | |
"Click Cancel to exit."), | |
QMessageBox.Cancel) | |
return False | |
query = QSqlQuery() | |
query.exec_("CREATE TABLE `typeOfValue` (`ID` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE, "\ | |
"`name` TEXT NOT NULL, `unit` TEXT NOT NULL,`source` TEXT,`import` INTEGER,`importIfZero` INTEGER,"\ | |
"`visible` INTEGER);") | |
query.exec_('insert into typeOfValue (name, unit, source, import, importIfZero, visible) values '\ | |
'("Sound", "dB", "live", 0,0,2)') | |
query.exec_('insert into typeOfValue (name, unit, source, import, importIfZero, visible) values '\ | |
'("Flow", "m/min", "live", 0,2,2)') | |
query.exec_('insert into typeOfValue (name, unit, source, import, importIfZero, visible) values '\ | |
'("Vibration", "mm/s", "live", 2,2,2)') | |
query.exec_('insert into typeOfValue (name, unit, source, import, importIfZero, visible) values '\ | |
'("Voltage", "V", "live", 0,0,0)') | |
query.exec_('insert into typeOfValue (name, unit, source, import, importIfZero, visible) values '\ | |
'("Ampere", "A", "live", 2,0,2)') | |
return db | |
####################################################################################################################### | |
# M A I N | |
####################################################################################################################### | |
if __name__ == '__main__': | |
createConnection() | |
app = QApplication(sys.argv) | |
prog = ImportFilter() | |
prog.show() | |
sys.exit(app.exec_()) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment