Python 3.x self.tableView=QtWidgets.QTableView(self.gridLayoutWidget) font=QtGui.QFont() font.setFamily(“MS Shell Dlg 2”) 字体设置点大小(10) font.
self.tableView=QtWidgets.QTableView(self.gridLayoutWidget) font=QtGui.QFont() font.setFamily(“MS Shell Dlg 2”) 字体设置点大小(10) font.setBold(真) 字体设置重量(75) self.tableView.setFont(字体) self.tableView.setObjectName(“tableView”) self.gridLayout.addWidget(self.tableView,0,0,1,1) self.verticallayouthidget_4=qtwidts.QWidget(对话框) self.verticallayouthidget_4.setGeometry(QtCore.QRect(10270201,40)) self.verticalLayoutWidget_4.setObjectName(“verticalLayoutWidget_4”) self.verticalLayout_4=qtwidts.QVBoxLayout(self.verticallayouthidget_4) self.verticalLayout_4.setContentsMargins(0,0,0,0) self.verticalLayout_4.setObjectName(“verticalLayout_4”) #确认按钮信号 self.pushButton_2=qtwidts.QPushButton(self.verticalLayoutWidget_4) self.button_2.点击连接(self.validate) font=QtGui.QFont() font.setFamily(“Waree”) 字体设置点大小(12) font.setBold(真) 字体设置重量(75) self.button_2.setFont(字体) self.butdown_2.setObjectName(“butdown_2”) self.verticalLayout_4.addWidget(self.button_2) self.verticallayouthidget_5=qtwidts.QWidget(对话框) self.verticallayouthidget_5.setGeometry(QtCore.QRect(1071020141)) self.verticalLayoutWidget_5.setObjectName(“verticalLayoutWidget_5”) self.verticalLayout_5=qtwidts.QVBoxLayout(self.verticalLayout-widget_5) self.verticalLayout_5.setContentsMargins(0,0,0,0) self.verticalLayout_5.setObjectName(“verticalLayout_5”) #出口按钮信号 self.pushButton_3=qtwidts.QPushButton(self.verticalLayoutWidget_5) self.button_3.点击连接(self.exportCSV) font=QtGui.QFont() font.setFamily(“Waree”) 字体设置点大小(12) font.setBold(真) 字体设置重量(75) self.button_3.setFont(字体) self.butdown_3.setObjectName(“butdown_3”) self.verticalLayout_5.addWidget(self.button_3) self.verticallayouthidget_6=qtwidts.QWidget(对话框) self.verticallayouthidget_6.setGeometry(QtCore.QRect(10770201,41)) self.verticalLayoutWidget_6.setObjectName(“verticalLayoutWidget_6”) self.verticalLayout_6=qtwidts.QVBoxLayout(self.verticallayouthidget_6) self.verticalLayout_6.setContentsMargins(0,0,0,0) self.verticalLayout_6.setObjectName(“verticalLayout_6”) #复位按钮信号 self.butdown_4=qtwidts.QPushButton(self.verticalLayoutWidget_6) font=QtGui.QFont() font.setFamily(“Waree”) 字体设置点大小(12) font.setBold(真) 字体设置重量(75) self.button_4.setFont(字体) self.butdown_4.setObjectName(“butdown_4”) self.verticalLayout_6.addWidget(self.button_4) self.gridLayoutWidget_4=qtwidts.QWidget(对话框) self.gridLayoutWidget_4.setGeometry(QtCore.QRect(60,20,117,144)) self.gridLayoutWidget_4.setObjectName(“gridLayoutWidget_4”) self.gridLayout_2=qtwidts.QGridLayout(self.gridLayoutWidget_4) self.gridLayout_2.setContentsMargins(0,0,0,0) self.gridLayout_2.setObjectName(“gridLayout_2”) self.label_3=qtwidts.QLabel(self.gridLayoutWidget_4) self.label_3.setText(“”) self.label_3.setPixmap(QtGui.QPixmap(“../../../../../Pictures/74067_web(2.jpg”)) self.label_3.setObjectName(“label_3”) self.gridLayout_2.addWidget(self.label_3,0,0,1,1) #选择状态信号 self.pushButton_5=qtwidts.QPushButton(对话框) self.button_5.点击连接(self.onSelectState) 自动按钮_5.设置几何(QtCore.QRect(10、330、201、33)) font=QtGui.QFont() font.setFamily(“Waree”) 字体设置点大小(12) font.setBold(真) 字体设置重量(75) self.button_5.setFont(字体) self.butdown_5.setObjectName(“butdown_5”) #选择地区信号 self.pushButton_6=qtwidts.QPushButton(对话框) self.button_6.点击连接(self.onSelectDistrict) 自动按钮_6.设置几何(QtCore.QRect(10、380、201、33)) font=QtGui.QFont() font.setFamily(“Waree”) 字体设置点大小(12) font.setBold(真) 字体设置重量(75) self.button_6.setFont(字体) self.butdown_6.setObjectName(“butdown_6”) #选择设备类型信号 self.pushButton_7=qtwidts.QPushButton(对话框) self.button_7.clicked.connect(self.onSelectFacilitytype) 自身按钮_7.设置几何(QtCore.QRect(043021133)) font=QtGui.QFont() font.setFamily(“Waree”) 字体设置点大小(12) font.setBold(真) 字体设置重量(75) self.button_7.setFont(字体) self.butdown_7.setObjectName(“butdown_7”) #选择设备名称信号 self.pushButton_8=qtwidts.QPushButton(对话框) self.button_8.clicked.connect(self.onSelectFacilityName) 自身按钮_8.设置几何(QtCore.QRect(0、480、211、33)) font=QtGui.QFont() font.setFamily(“Waree”) 字体设置点大小(12) font.setBold(真) 字体设置重量(75) self.button_8.setFont(字体) self.butdown_8.setObjectName(“butdown_8”) #选择月份信号 self.pushButton_9=qtwidts.QPushButton(对话框) 自动按钮_9.设置几何体(QtCore.QRect(0,530,211,33)) font=QtGui.QFont() font.setFamily(“Waree”) 字体设置点大小(12) font.setBold(真) 字体设置重量(75) self.button_9.setFont(字体) self.u 9。Python 3.x self.tableView=QtWidgets.QTableView(self.gridLayoutWidget) font=QtGui.QFont() font.setFamily(“MS Shell Dlg 2”) 字体设置点大小(10) font.,python-3.x,pyqt5,Python 3.x,Pyqt5,self.tableView=QtWidgets.QTableView(self.gridLayoutWidget) font=QtGui.QFont() font.setFamily(“MS Shell Dlg 2”) 字体设置点大小(10) font.setBold(真) 字体设置重量(75) self.tableView.setFont(字体) self.tableView.setObjectName(“tableView”) self.gridLayout.addWidget(self.
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtGui import QIcon, QStandardItemModel
from PyQt5.QtWidgets import QCompleter, QFileDialog, QTableWidget
from PyQt5.QtCore import Qt, QDir
import pandas as pd
#--------------------------------------------------- Pandas Model ------------------------------------------
class PandasModel(QtCore.QAbstractTableModel):
def __init__(self, df=pd.DataFrame(), parent=None):
QtCore.QAbstractTableModel.__init__(self, parent=parent)
self._df = df.copy()
self.bolds = dict()
def toDataFrame(self):
return self._df.copy()
def headerData(self, section, orientation, role=QtCore.Qt.DisplayRole):
if orientation == QtCore.Qt.Horizontal:
if role == QtCore.Qt.DisplayRole:
try:
return self._df.columns.tolist()[section]
except (IndexError,):
return QtCore.QVariant()
elif role == QtCore.Qt.FontRole:
return self.bolds.get(section, QtCore.QVariant())
elif orientation == QtCore.Qt.Vertical:
if role == QtCore.Qt.DisplayRole:
try:
# return self.df.index.tolist()
return self._df.index.tolist()[section]
except (IndexError,):
return QtCore.QVariant()
return QtCore.QVariant()
def setFont(self, section, font):
self.bolds[section] = font
self.headerDataChanged.emit(QtCore.Qt.Horizontal, 0, self.columnCount())
def data(self, index, role=QtCore.Qt.DisplayRole):
if role != QtCore.Qt.DisplayRole:
return QtCore.QVariant()
if not index.isValid():
return QtCore.QVariant()
return QtCore.QVariant(str(self._df.iloc[index.row(), index.column()]))
def setData(self, index, value, role):
row = self._df.index[index.row()]
col = self._df.columns[index.column()]
if hasattr(value, "toPyObject"):
# PyQt4 gets a QVariant
value = value.toPyObject()
else:
# PySide gets an unicode
dtype = self._df[col].dtype
if dtype != object:
value = None if value == "" else dtype.type(value)
self._df.set_value(row, col, value)
return True
def rowCount(self, parent=QtCore.QModelIndex()):
return len(self._df.index)
def columnCount(self, parent=QtCore.QModelIndex()):
return len(self._df.columns)
def sort(self, column, order):
colname = self._df.columns.tolist()[column]
self.layoutAboutToBeChanged.emit()
self._df.sort_values(
colname, ascending=order == QtCore.Qt.AscendingOrder, inplace=True
)
self._df.reset_index(inplace=True, drop=True)
self.layoutChanged.emit()
#--------------------------------------------------- Checkable Pandas Model ------------------------------
class CheckablePandasModel(PandasModel):
def __init__(self, df=pd.DataFrame(), parent=None):
super().__init__(df, parent)
self.checkable_values = set()
self._checkable_column = -1
@property
def checkable_column(self):
return self._checkable_column
@checkable_column.setter
def checkable_column(self, column):
if self.checkable_column == column:
return
last_column = self.checkable_column
self._checkable_column = column
if last_column == -1:
self.beginInsertColumns(
QtCore.QModelIndex(), self.checkable_column, self.checkable_column
)
self.endInsertColumns()
elif self.checkable_column == -1:
self.beginRemoveColumns(QtCore.QModelIndex(), last_column, last_column)
self.endRemoveColumns()
for c in (last_column, column):
if c > 0:
self.dataChanged.emit(
self.index(0, c), self.index(self.columnCount() - 1, c)
)
def columnCount(self, parent=QtCore.QModelIndex()):
return super().columnCount(parent) + (1 if self.checkable_column != -1 else 0)
def data(self, index, role=QtCore.Qt.DisplayRole):
if self.checkable_column != -1:
row, col = index.row(), index.column()
if col == self.checkable_column:
if role == QtCore.Qt.CheckStateRole:
return (
QtCore.Qt.Checked
if row in self.checkable_values
else QtCore.Qt.Unchecked
)
return QtCore.QVariant()
if col > self.checkable_column:
index = index.sibling(index.row(), col - 1)
return super().data(index, role)
def setData(self, index, value, role):
if self.checkable_column != -1:
row, col = index.row(), index.column()
if col == self.checkable_column:
if role == QtCore.Qt.CheckStateRole:
if row in self.checkable_values:
self.checkable_values.discard(row)
else:
self.checkable_values.add(row)
self.dataChanged.emit(index, index, (role,))
return True
return False
if col > self.checkable_column:
index = index.sibling(index.row(), col - 1)
return super().setData(index, value, role)
def headerData(self, section, orientation, role=QtCore.Qt.DisplayRole):
if self.checkable_column != -1:
if section == self.checkable_column and orientation == QtCore.Qt.Horizontal:
return QtCore.QVariant()
if section > self.checkable_column and orientation == QtCore.Qt.Horizontal:
section -= 1
return super().headerData(section, orientation, role)
def flags(self, index):
if self.checkable_column != -1:
col = index.column()
if col == self.checkable_column:
return QtCore.Qt.ItemIsUserCheckable | QtCore.Qt.ItemIsEnabled
if col > self.checkable_column:
index = index.sibling(index.row(), col - 1)
return super().flags(index)
#--------------------------------------------------
class CustomProxyModel(QtCore.QSortFilterProxyModel):
def __init__(self, parent=None):
super().__init__()
self._filters = dict()
@property
def filters(self):
return self._filters
def setFilter(self, expresion, column):
if expresion:
self.filters[column] = expresion
elif column in self.filters:
del self.filters[column]
self.invalidateFilter()
def filterAcceptsRow(self, source_row, source_parent):
for column, expresion in self.filters.items():
text = self.sourceModel().index(source_row, column, source_parent).data()
regex = QtCore.QRegExp(
expresion, QtCore.Qt.CaseInsensitive, QtCore.QRegExp.RegExp
)
if regex.indexIn(text) == -1:
return False
return True
#------------------------------------------------- Main Odject Class --------------------------------------------
class Ui_Dialog(object):
def setupUi(self, Dialog):
Dialog.setObjectName("Dialog")
Dialog.resize(1858, 1102)
self.gridLayoutWidget = QtWidgets.QWidget(Dialog)
self.gridLayoutWidget.setGeometry(QtCore.QRect(320, 129, 1521, 961))
self.gridLayoutWidget.setObjectName("gridLayoutWidget")
self.gridLayout = QtWidgets.QGridLayout(self.gridLayoutWidget)
self.gridLayout.setContentsMargins(0, 0, 0, 0)
self.gridLayout.setObjectName("gridLayout")
self.tableView = QtWidgets.QTableView(self.gridLayoutWidget)
font = QtGui.QFont()
font.setBold(True)
font.setWeight(75)
#----------------------------------------- tableView to display dataframe ------------------------------
self.tableView.setFont(font)
self.tableView.setAutoFillBackground(False)
self.tableView.setObjectName("tableView")
self.gridLayout.addWidget(self.tableView, 0, 0, 1, 1)
self.pushButton = QtWidgets.QPushButton(Dialog)
self.pushButton.setEnabled(True)
self.pushButton.setGeometry(QtCore.QRect(10, 150, 301, 51))
font = QtGui.QFont()
font.setPointSize(12)
font.setBold(True)
font.setWeight(75)
#---------------------------------------------- upload Button --------------------------------------------
self.pushButton.setFont(font)
self.pushButton.setObjectName("pushButton")
self.pushButton.clicked.connect(self.loadFile)
self.lineEdit = QtWidgets.QLineEdit(Dialog)
self.lineEdit.setGeometry(QtCore.QRect(322, 11, 1521, 51))
font = QtGui.QFont()
font.setPointSize(9)
font.setBold(True)
font.setWeight(75)
#------------------------------------ Uploaded File Name Display in LineEdit ------------------------------
self.lineEdit.setFont(font)
self.lineEdit.setObjectName("lineEdit")
self.lineEdit_2 = QtWidgets.QLineEdit(Dialog)
self.lineEdit_2.setGeometry(QtCore.QRect(322, 71, 1521, 51))
font = QtGui.QFont()
font.setPointSize(12)
font.setBold(True)
font.setWeight(75)
#-------------------------------------------- Search in LineEdit ------------------------------------------
self.lineEdit_2.setFont(font)
self.lineEdit_2.setObjectName("lineEdit_2")
self.pushButton_2 = QtWidgets.QPushButton(Dialog)
self.pushButton_2.setGeometry(QtCore.QRect(10, 220, 301, 51))
font = QtGui.QFont()
font.setPointSize(12)
font.setBold(True)
font.setWeight(75)
#------------------------------------------- Validate Button -----------------------------------------------
self.pushButton_2.setFont(font)
self.pushButton_2.setObjectName("pushButton_2")
self.label = QtWidgets.QLabel(Dialog)
self.label.setGeometry(QtCore.QRect(20, 290, 151, 21))
font = QtGui.QFont()
font.setPointSize(12)
font.setBold(True)
font.setWeight(75)
self.label.setFont(font)
self.label.setObjectName("label")
#------------------------------------------ Select Date ComboBox -----------------------------------------------------
self.comboBox = QtWidgets.QComboBox(Dialog)
self.comboBox.setGeometry(QtCore.QRect(10, 330, 301, 51))
self.comboBox.setObjectName("comboBox")
self.label_2 = QtWidgets.QLabel(Dialog)
self.label_2.setGeometry(QtCore.QRect(20, 410, 221, 21))
font = QtGui.QFont()
font.setPointSize(12)
font.setBold(True)
font.setWeight(75)
self.label_2.setFont(font)
self.label_2.setObjectName("label_2")
#------------------------------------------- Select Facility Name ComboBox --------------------------------------
self.comboBox_2 = QtWidgets.QComboBox(Dialog)
self.comboBox_2.setGeometry(QtCore.QRect(10, 450, 301, 51))
self.comboBox_2.setObjectName("comboBox_2")
# self.label_3 = QtWidgets.QLabel(Dialog)
# self.label_3.setGeometry(QtCore.QRect(80, 10, 121, 121))
# self.label_3.setText("")
# self.label_3.setPixmap(QtGui.QPixmap("../../../../Pictures/74067_web (2).jpg"))
# self.label_3.setObjectName("label_3")
self.pushButton_3 = QtWidgets.QPushButton(Dialog)
self.pushButton_3.setGeometry(QtCore.QRect(10, 520, 301, 51))
font = QtGui.QFont()
font.setPointSize(12)
font.setBold(True)
font.setWeight(75)
#--------------------------------------------- Reset Button ------------------------------------------------
self.pushButton_3.setFont(font)
self.pushButton_3.setObjectName("pushButton_3")
self.pushButton_4 = QtWidgets.QPushButton(Dialog)
self.pushButton_4.setGeometry(QtCore.QRect(10, 590, 301, 51))
font = QtGui.QFont()
font.setPointSize(12)
font.setBold(True)
font.setWeight(75)
#---------------------------------------------- Export Button ------------------------------------------
self.pushButton_4.setFont(font)
self.pushButton_4.setObjectName("pushButton_4")
self.retranslateUi(Dialog)
QtCore.QMetaObject.connectSlotsByName(Dialog)
def retranslateUi(self, Dialog):
_translate = QtCore.QCoreApplication.translate
Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
self.pushButton.setText(_translate("Dialog", "Upload"))
self.pushButton_2.setText(_translate("Dialog", "Validate"))
self.label.setText(_translate("Dialog", "Select Date"))
self.label_2.setText(_translate("Dialog", "Select Facility Name"))
self.pushButton_3.setText(_translate("Dialog", "Reset"))
self.pushButton_4.setText(_translate("Dialog", "Export"))
# Upload file button functionality
def loadFile(self):
global df
# getting file and its name
fileName, _ = QFileDialog.getOpenFileName(Dialog, "Open CSV",
(QtCore.QDir.homePath()), "CSV (*.csv)")
# displaying filename in display box
self.lineEdit.setText(fileName)
# reading csv files
df = pd.read_csv(fileName)
#grab the first row for the header
new_header = df.iloc[1]
#set the header row as the df header
df.columns = new_header
df.dropna(how='all', axis=1)
df.columns = ['col_' + str(ind) for ind in range(1, len(df.columns)+1)]
df.drop(df.index[[0, 1]], inplace=True)
self.model = PandasModel(df)
self.tableView.setModel(self.model)
self.proxy = CustomProxyModel(self)
self.proxy.setSourceModel(self.model)
#self.comboBox.activated[str].connect(self.onSelectIndependentCols)
#self.textEdit_2.activated[str].connect(self.onSelectIndependentCols)
# displaying list of dependent columns in a co
#self.comboBox.activated[str].connect(self.onSelectTargetCol)
self.comboBox.addItems(["{0}".format(col) for col in self.model._df['col_13'][:]])
self.comboBox_2.addItems(["{0}".format(col) for col in self.model._df['col_1'][:]])
# self.lineEdit_2.textChanged.connect(self.on_lineEdit_textChanged)
# self.horizontalHeader = self.tableView.horizontalHeader()
# self.horizontalHeader.sectionClicked.connect(
# self.on_view_horizontalHeader_sectionClicked
# )
self.pushButton.setDisabled(True)
return df
####################################################################################
@QtCore.pyqtSlot(int)
def on_view_horizontalHeader_sectionClicked(self, logicalIndex):
if logicalIndex == self.model.checkable_column:
return
self.menuValues = QtWidgets.QMenu(self)
self.comboBox.blockSignals(True)
self.comboBox.setCurrentIndex(
logicalIndex - 1
if logicalIndex > self.model.checkable_column
else logicalIndex
)
self.comboBox.blockSignals(True)
valuesUnique = set(
self.proxy.index(i, logicalIndex).data()
for i in range(self.proxy.rowCount())
)
actionAll = QtWidgets.QAction("All", self)
self.menuValues.addAction(actionAll)
self.menuValues.addSeparator()
for i, name in enumerate(valuesUnique):
action = QtWidgets.QAction(name, self)
action.setData(i)
self.menuValues.addAction(action)
headerPos = self.view.mapToGlobal(self.horizontalHeader.pos())
pos = headerPos + QtCore.QPoint(
self.horizontalHeader.sectionPosition(logicalIndex),
self.horizontalHeader.height(),
)
action = self.menuValues.exec_(pos)
if action is not None:
font = QtGui.QFont()
if action.data() is None: # all
self.proxy.setFilter("", logicalIndex)
else:
font.setBold(True)
self.proxy.setFilter(action.text(), logicalIndex)
self.model.setFont(logicalIndex - 1, font)
@QtCore.pyqtSlot(str)
def on_lineEdit_textChanged(self, text):
self.proxy.setFilter(text, self.comboBox.currentIndex() + 1)
####################################################################################
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
Dialog = QtWidgets.QDialog()
ui = Ui_Dialog()
ui.setupUi(Dialog)
Dialog.show()
sys.exit(app.exec_())
import pandas as pd
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QFileDialog
from PyQt5.QtCore import Qt
import sys
########################################### PandasModel to display it on tableView #####################
class PandasModel(QtCore.QAbstractTableModel):
def __init__(self, df=pd.DataFrame(), parent=None):
QtCore.QAbstractTableModel.__init__(self, parent=parent)
self._df = df.copy()
def toDataFrame(self):
return self._df.copy()
def headerData(self, section, orientation, role=QtCore.Qt.DisplayRole):
if role != QtCore.Qt.DisplayRole:
return QtCore.QVariant()
if orientation == QtCore.Qt.Horizontal:
try:
return self._df.columns.tolist()[section]
except (IndexError, ):
return QtCore.QVariant()
elif orientation == QtCore.Qt.Vertical:
try:
# return self.df.index.tolist()
return self._df.index.tolist()[section]
except (IndexError, ):
return QtCore.QVariant()
def data(self, index, role=QtCore.Qt.DisplayRole):
if role != QtCore.Qt.DisplayRole:
return QtCore.QVariant()
if not index.isValid():
return QtCore.QVariant()
return QtCore.QVariant(str(self._df.iloc[index.row(), index.column()]))
def setData(self, index, value, role):
row = self._df.index[index.row()]
col = self._df.columns[index.column()]
if hasattr(value, 'toPyObject'):
# PyQt4 gets a QVariant
value = value.toPyObject()
else:
# PySide gets an unicode
dtype = self._df[col].dtype
if dtype != object:
value = None if value == '' else dtype.type(value)
self._df.set_value(row, col, value)
return True
def rowCount(self, parent=QtCore.QModelIndex()):
return len(self._df.index)
def columnCount(self, parent=QtCore.QModelIndex()):
return len(self._df.columns)
def sort(self, column, order):
colname = self._df.columns.tolist()[column]
self.layoutAboutToBeChanged.emit()
self._df.sort_values(colname, ascending=order ==
QtCore.Qt.AscendingOrder, inplace=True)
self._df.reset_index(inplace=True, drop=True)
self.layoutChanged.emit()
################################################ Main UI ###############################################
class Ui_Dialog(object):
def setupUi(self, Dialog):
Dialog.setObjectName("Dialog")
Dialog.resize(1678, 977)
self.verticalLayoutWidget = QtWidgets.QWidget(Dialog)
self.verticalLayoutWidget.setGeometry(QtCore.QRect(10, 230, 201, 40))
self.verticalLayoutWidget.setObjectName("verticalLayoutWidget")
self.verticalLayout = QtWidgets.QVBoxLayout(self.verticalLayoutWidget)
self.verticalLayout.setContentsMargins(0, 0, 0, 0)
self.verticalLayout.setObjectName("verticalLayout")
# Upload Button Signal
self.pushButton = QtWidgets.QPushButton(self.verticalLayoutWidget)
self.pushButton.clicked.connect(self.upload)
font = QtGui.QFont()
font.setFamily("Waree")
font.setPointSize(12)
font.setBold(True)
font.setWeight(75)
self.pushButton.setFont(font)
self.pushButton.setObjectName("pushButton")
self.verticalLayout.addWidget(self.pushButton)
self.verticalLayoutWidget_2 = QtWidgets.QWidget(Dialog)
self.verticalLayoutWidget_2.setGeometry(QtCore.QRect(220, 20, 1441, 40))
self.verticalLayoutWidget_2.setObjectName("verticalLayoutWidget_2")
self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.verticalLayoutWidget_2)
self.verticalLayout_2.setContentsMargins(0, 0, 0, 0)
self.verticalLayout_2.setObjectName("verticalLayout_2")
self.lineEdit = QtWidgets.QLineEdit(self.verticalLayoutWidget_2)
font = QtGui.QFont()
font.setFamily("Waree")
font.setPointSize(12)
font.setBold(True)
font.setWeight(75)
self.lineEdit.setFont(font)
self.lineEdit.setObjectName("lineEdit")
self.verticalLayout_2.addWidget(self.lineEdit)
self.verticalLayoutWidget_3 = QtWidgets.QWidget(Dialog)
self.verticalLayoutWidget_3.setGeometry(QtCore.QRect(220, 60, 1441, 40))
self.verticalLayoutWidget_3.setObjectName("verticalLayoutWidget_3")
self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.verticalLayoutWidget_3)
self.verticalLayout_3.setContentsMargins(0, 0, 0, 0)
self.verticalLayout_3.setObjectName("verticalLayout_3")
self.lineEdit_2 = QtWidgets.QLineEdit(self.verticalLayoutWidget_3)
font = QtGui.QFont()
font.setFamily("Waree")
font.setPointSize(12)
font.setBold(True)
font.setWeight(75)
self.lineEdit_2.setFont(font)
self.lineEdit_2.setObjectName("lineEdit_2")
self.verticalLayout_3.addWidget(self.lineEdit_2)
self.gridLayoutWidget = QtWidgets.QWidget(Dialog)
self.gridLayoutWidget.setGeometry(QtCore.QRect(220, 100, 1441, 861))
self.gridLayoutWidget.setObjectName("gridLayoutWidget")
self.gridLayout = QtWidgets.QGridLayout(self.gridLayoutWidget)
self.gridLayout.setContentsMargins(0, 0, 0, 0)
self.gridLayout.setObjectName("gridLayout")
self.tableView = QtWidgets.QTableView(self.gridLayoutWidget)
font = QtGui.QFont()
font.setFamily("MS Shell Dlg 2")
font.setPointSize(10)
font.setBold(True)
font.setWeight(75)
self.tableView.setFont(font)
self.tableView.setObjectName("tableView")
self.gridLayout.addWidget(self.tableView, 0, 0, 1, 1)
self.verticalLayoutWidget_4 = QtWidgets.QWidget(Dialog)
self.verticalLayoutWidget_4.setGeometry(QtCore.QRect(10, 270, 201, 40))
self.verticalLayoutWidget_4.setObjectName("verticalLayoutWidget_4")
self.verticalLayout_4 = QtWidgets.QVBoxLayout(self.verticalLayoutWidget_4)
self.verticalLayout_4.setContentsMargins(0, 0, 0, 0)
self.verticalLayout_4.setObjectName("verticalLayout_4")
# Validate Button Signal
self.pushButton_2 = QtWidgets.QPushButton(self.verticalLayoutWidget_4)
self.pushButton_2.clicked.connect(self.validate)
font = QtGui.QFont()
font.setFamily("Waree")
font.setPointSize(12)
font.setBold(True)
font.setWeight(75)
self.pushButton_2.setFont(font)
self.pushButton_2.setObjectName("pushButton_2")
self.verticalLayout_4.addWidget(self.pushButton_2)
self.verticalLayoutWidget_5 = QtWidgets.QWidget(Dialog)
self.verticalLayoutWidget_5.setGeometry(QtCore.QRect(10, 710, 201, 41))
self.verticalLayoutWidget_5.setObjectName("verticalLayoutWidget_5")
self.verticalLayout_5 = QtWidgets.QVBoxLayout(self.verticalLayoutWidget_5)
self.verticalLayout_5.setContentsMargins(0, 0, 0, 0)
self.verticalLayout_5.setObjectName("verticalLayout_5")
# Export Button Signal
self.pushButton_3 = QtWidgets.QPushButton(self.verticalLayoutWidget_5)
self.pushButton_3.clicked.connect(self.exportCSV)
font = QtGui.QFont()
font.setFamily("Waree")
font.setPointSize(12)
font.setBold(True)
font.setWeight(75)
self.pushButton_3.setFont(font)
self.pushButton_3.setObjectName("pushButton_3")
self.verticalLayout_5.addWidget(self.pushButton_3)
self.verticalLayoutWidget_6 = QtWidgets.QWidget(Dialog)
self.verticalLayoutWidget_6.setGeometry(QtCore.QRect(10, 770, 201, 41))
self.verticalLayoutWidget_6.setObjectName("verticalLayoutWidget_6")
self.verticalLayout_6 = QtWidgets.QVBoxLayout(self.verticalLayoutWidget_6)
self.verticalLayout_6.setContentsMargins(0, 0, 0, 0)
self.verticalLayout_6.setObjectName("verticalLayout_6")
# Reset Button Signal
self.pushButton_4 = QtWidgets.QPushButton(self.verticalLayoutWidget_6)
font = QtGui.QFont()
font.setFamily("Waree")
font.setPointSize(12)
font.setBold(True)
font.setWeight(75)
self.pushButton_4.setFont(font)
self.pushButton_4.setObjectName("pushButton_4")
self.verticalLayout_6.addWidget(self.pushButton_4)
self.gridLayoutWidget_4 = QtWidgets.QWidget(Dialog)
self.gridLayoutWidget_4.setGeometry(QtCore.QRect(60, 20, 117, 144))
self.gridLayoutWidget_4.setObjectName("gridLayoutWidget_4")
self.gridLayout_2 = QtWidgets.QGridLayout(self.gridLayoutWidget_4)
self.gridLayout_2.setContentsMargins(0, 0, 0, 0)
self.gridLayout_2.setObjectName("gridLayout_2")
self.label_3 = QtWidgets.QLabel(self.gridLayoutWidget_4)
self.label_3.setText("")
self.label_3.setPixmap(QtGui.QPixmap("../../../../Pictures/74067_web (2).jpg"))
self.label_3.setObjectName("label_3")
self.gridLayout_2.addWidget(self.label_3, 0, 0, 1, 1)
# Select State Signal
self.pushButton_5 = QtWidgets.QPushButton(Dialog)
self.pushButton_5.clicked.connect(self.onSelectState)
self.pushButton_5.setGeometry(QtCore.QRect(10, 330, 201, 33))
font = QtGui.QFont()
font.setFamily("Waree")
font.setPointSize(12)
font.setBold(True)
font.setWeight(75)
self.pushButton_5.setFont(font)
self.pushButton_5.setObjectName("pushButton_5")
# Select District Signal
self.pushButton_6 = QtWidgets.QPushButton(Dialog)
self.pushButton_6.clicked.connect(self.onSelectDistrict)
self.pushButton_6.setGeometry(QtCore.QRect(10, 380, 201, 33))
font = QtGui.QFont()
font.setFamily("Waree")
font.setPointSize(12)
font.setBold(True)
font.setWeight(75)
self.pushButton_6.setFont(font)
self.pushButton_6.setObjectName("pushButton_6")
# Select Facility Type Signal
self.pushButton_7 = QtWidgets.QPushButton(Dialog)
self.pushButton_7.clicked.connect(self.onSelectFacilitytype)
self.pushButton_7.setGeometry(QtCore.QRect(0, 430, 211, 33))
font = QtGui.QFont()
font.setFamily("Waree")
font.setPointSize(12)
font.setBold(True)
font.setWeight(75)
self.pushButton_7.setFont(font)
self.pushButton_7.setObjectName("pushButton_7")
# Select Facility Name Signal
self.pushButton_8 = QtWidgets.QPushButton(Dialog)
self.pushButton_8.clicked.connect(self.onSelectFacilityName)
self.pushButton_8.setGeometry(QtCore.QRect(0, 480, 211, 33))
font = QtGui.QFont()
font.setFamily("Waree")
font.setPointSize(12)
font.setBold(True)
font.setWeight(75)
self.pushButton_8.setFont(font)
self.pushButton_8.setObjectName("pushButton_8")
#Select Month Signal
self.pushButton_9 = QtWidgets.QPushButton(Dialog)
self.pushButton_9.setGeometry(QtCore.QRect(0, 530, 211, 33))
font = QtGui.QFont()
font.setFamily("Waree")
font.setPointSize(12)
font.setBold(True)
font.setWeight(75)
self.pushButton_9.setFont(font)
self.pushButton_9.setObjectName("pushButton_9")
#Select Year Signal
self.pushButton_10 = QtWidgets.QPushButton(Dialog)
self.pushButton_10.setGeometry(QtCore.QRect(0, 580, 211, 33))
font = QtGui.QFont()
font.setFamily("Waree")
font.setPointSize(12)
font.setBold(True)
font.setWeight(75)
self.pushButton_10.setFont(font)
self.pushButton_10.setObjectName("pushButton_10")
self.retranslateUi(Dialog)
QtCore.QMetaObject.connectSlotsByName(Dialog)
def retranslateUi(self, Dialog):
_translate = QtCore.QCoreApplication.translate
Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
self.pushButton.setText(_translate("Dialog", "Upload"))
self.lineEdit_2.setPlaceholderText(_translate("Dialog", "Search..."))
self.pushButton_2.setText(_translate("Dialog", "Validate"))
self.pushButton_3.setText(_translate("Dialog", "Export"))
self.pushButton_4.setText(_translate("Dialog", "Reset"))
self.pushButton_5.setText(_translate("Dialog", "Select State"))
self.pushButton_6.setText(_translate("Dialog", "Select District"))
self.pushButton_7.setText(_translate("Dialog", "Select Facility Type"))
self.pushButton_8.setText(_translate("Dialog", "Select Facility Name"))
self.pushButton_9.setText(_translate("Dialog", "Select Month"))
self.pushButton_10.setText(_translate("Dialog", "Select Year"))
# To upload file
def upload(self):
global df_, df_OrgHeaders
products = {'Date': [2,3,1,5,3,9],
'Month': ['April', 'May', 'April', 'June', 'May', 'July'],
'Year': [2020, 2021, 2019, 2020, 2020, 2020],
'State': ['BR', 'JH', 'HR', 'JH', 'BR', 'PB'],
'Blank': ['nan','nan','nan','nan','nan','nan'],
'District' : ['BS', 'GW', 'AM', 'RN', 'PB', 'GR'],
'Facility Type': ['HSC', 'DH', 'HSC', 'CHC', 'HSC', 'DH'],
'Facility Name': ['PP CAC', 'SC Bkr', 'SC Bara', 'SC Bkr', 'PP CAC', 'PP CAC'],
'4.3': [1, 0, 2, 2, 9, 8],
'2.1.1.a': [0, 1, 1, 2, 3, 4],
'2.1.1.b': [1, 2, 0, 0, 0, 0],
'2.2': [1,2, 3, 4, 0, 0],
}
df_ = pd.DataFrame(products, columns= ['Date', 'Month', 'Year', 'State', 'Blank', 'District', 'Facility Type', 'Facility Name', '4.3', '2.1.1.a', '2.1.1.b', '2.2'])
self.tableView.setModel(PandasModel(df_))
# grab the first row for the header
new_header = df_.iloc[1]
# set the header row as the df header
df_.columns = new_header
#df_.dropna(how='all', axis=1)
df_.columns = ['col_' + str(index)
for index in range(1, len(df_.columns)+1)]
df_OrgHeaders = df_.iloc[[0, 1]]
#df_.drop(df_.index[[0, 1]], inplace=True)
#df_.dropna(subset=['col_4'], how='all', inplace=True)
return df_
def loadFile(self, df_):
self.pushButton.setDisabled(False)
return df_
# to validate modified checks
def validate(self):
global df, list_set
# df = self.loadFile()
df = self.loadFile(df_)
print("Entering Validate")
# 4.3 <= 2.1.1.a + 2.1.1.b + 2.2
def res1(df):
count = 0
if float(df['col_9']) > float(df['col_10']) + float(df['col_11']) + float(df['col_12']):
count = count+1
return 'Inconsistent'
elif pd.isnull(df['col_9']) and pd.isnull(df['col_10']) and pd.isnull(df['col_11']) and pd.isnull(df['col_12']):
return 'Blank'
elif pd.isnull(df['col_9']) or pd.isnull(df['col_10']) or pd.isnull(df['col_11']) or pd.isnull(df['col_12']):
return 'Blank Error'
else:
return 'Consistent'
df['4.3 <= 2.1.1.a + 2.1.1.b + 2.2'] = df.apply(res1, axis=1)
df = pd.concat([df_, df['4.3 <= 2.1.1.a + 2.1.1.b + 2.2']], axis=1)
df.astype(str)
# Select State #
# convert the set to the list
list_set = df_['col_4'].tolist()
unique_list = set(list_set)
return df
################################################################################
# Select State
# Select State Functionality
def onSelectState(self, index):
self.keywords = dict([(i, []) for i in range(df.shape[0])])
print(self.keywords)
self.menu = QtWidgets.QMenu(Dialog)
self.menu.setStyleSheet('QMenu { menu-scrollable: true; width: 400 }')
font = self.menu.font()
font.setPointSize(9)
font.setBold(True)
font.setWeight(75)
self.menu.setFont(font)
index = 4
self.col = index
data_unique = []
self.checkBoxs = []
# Selectall added into Dropdown
checkBox = QtWidgets.QCheckBox("Select all", self.menu)
# All the checkboxes are enabled to check
checkableAction = QtWidgets.QWidgetAction(self.menu)
checkableAction.setDefaultWidget(checkBox)
self.menu.addAction(checkableAction)
checkBox.setChecked(True)
checkBox.stateChanged.connect(self.slotSelect)
# list storing state data
item = list_set
# looping to fill checkboxes, initially all checkboxes will be checked
for i in range(len(df)):
if item[i] not in data_unique:
data_unique.append(item[i])
checkBox = QtWidgets.QCheckBox(item[i], self.menu)
checkBox.setChecked(True)
checkableAction = QtWidgets.QWidgetAction(self.menu)
checkableAction.setDefaultWidget(checkBox)
self.menu.addAction(checkableAction)
self.checkBoxs.append(checkBox)
# Ok, cancel button
btn = QtWidgets.QDialogButtonBox(QtWidgets.QDialogButtonBox.Ok | QtWidgets.QDialogButtonBox.Cancel,
QtCore.Qt.Horizontal, self.menu)
# ok selected
btn.accepted.connect(self.menuClose)
# rejected , nothing selected
btn.rejected.connect(self.menu.close)
checkableAction = QtWidgets.QWidgetAction(self.menu)
checkableAction.setDefaultWidget(btn)
self.menu.addAction(checkableAction)
self.pushButton_5.setMenu(self.menu)
# method to check -> uncheck and vice versa
def slotSelect(self, state):
for checkbox in self.checkBoxs:
checkbox.setChecked(QtCore.Qt.Checked == state)
# after ok selected
def menuClose(self):
self.keywords[self.col] = []
for element in self.checkBoxs:
if element.isChecked():
self.keywords[self.col].append(element.text())
self.filterdata()
self.menu.close()
# Filter data columnwise
def filterdata(self):
global final_df
#keywords = dict([(i, []) for i in range(self.filterall.columnCount())])
columnsShow = dict([(i, True) for i in range(df.shape[0])])
# for i in range(df.shape[0]):
j=0
for j in range(df.shape[0]):
item = list_set
print(self.keywords[self.col])
#if self.keywords[self.col]:
if item[j] not in self.keywords[self.col]:
columnsShow[j] = False
# for key, value in columnsShow.items():
final_lst = [i for i in columnsShow.values()]
print(final_lst, 'this is final list of Select State')
final_df = df[final_lst]
print(final_df)
self.tableView.setModel(PandasModel(final_df))
return final_df
################################################################################
# Select District
# Select District Functionality
def onSelectDistrict(self, index):
self.keywords = dict([(i, []) for i in range(final_df.shape[0])])
print(self.keywords)
self.menu = QtWidgets.QMenu(Dialog)
self.menu.setStyleSheet('QMenu { menu-scrollable: true; width: 400 }')
font = self.menu.font()
font.setPointSize(9)
font.setBold(True)
font.setWeight(75)
self.menu.setFont(font)
index = 6
self.col = index
data_unique = []
self.checkBoxs = []
# Selectall added into Dropdown
checkBox = QtWidgets.QCheckBox("Select all", self.menu)
# All the checkboxes are enabled to check
checkableAction = QtWidgets.QWidgetAction(self.menu)
checkableAction.setDefaultWidget(checkBox)
self.menu.addAction(checkableAction)
checkBox.setChecked(True)
checkBox.stateChanged.connect(self.slotSelectDistrict)
# list storing state data
list_set = final_df['col_6'].to_list()
item = list_set
# looping to fill checkboxes, initially all checkboxes will be checked
for i in range(len(item)):
if item[i] not in data_unique:
data_unique.append(item[i])
checkBox = QtWidgets.QCheckBox(item[i], self.menu)
checkBox.setChecked(True)
checkableAction = QtWidgets.QWidgetAction(self.menu)
checkableAction.setDefaultWidget(checkBox)
self.menu.addAction(checkableAction)
self.checkBoxs.append(checkBox)
# Ok, cancel button
btn = QtWidgets.QDialogButtonBox(QtWidgets.QDialogButtonBox.Ok | QtWidgets.QDialogButtonBox.Cancel,
QtCore.Qt.Horizontal, self.menu)
# ok selected
btn.accepted.connect(self.menuCloseDistrict)
# rejected , nothing selected
btn.rejected.connect(self.menu.close)
checkableAction = QtWidgets.QWidgetAction(self.menu)
checkableAction.setDefaultWidget(btn)
self.menu.addAction(checkableAction)
self.pushButton_6.setMenu(self.menu)
# method to check -> uncheck and vice versa
def slotSelectDistrict(self, state):
for checkbox in self.checkBoxs:
checkbox.setChecked(QtCore.Qt.Checked == state)
# after ok selected
def menuCloseDistrict(self):
self.keywords[self.col] = []
for element in self.checkBoxs:
if element.isChecked():
self.keywords[self.col].append(element.text())
print(self.keywords[self.col])
self.filterdataDistrict()
self.menu.close()
# Filter data columnwise
def filterdataDistrict(self):
global final_df_District
#keywords = dict([(i, []) for i in range(self.filterall.columnCount())])
columnsShow = dict([(i, True) for i in range(final_df['col_6'].shape[0])])
print(columnsShow)
j=0
for j in range(final_df['col_6'].shape[0]):
item = final_df['col_6'].to_list()
#if self.keywords[self.col]:
if item[j] not in self.keywords[self.col]:
columnsShow[j] = False
# for key, value in columnsShow.items():
final_lst = [i for i in columnsShow.values()]
print(final_lst, 'this is final list of Select District')
final_df_District = final_df[final_lst]
print(final_df_District)
self.tableView.setModel(PandasModel(final_df_District))
return final_df_District
################################# Main Function ##################################
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
Dialog = QtWidgets.QDialog()
ui = Ui_Dialog()
ui.setupUi(Dialog)
Dialog.show()
sys.exit(app.exec_())