__author__ = 'tanshu' from PyQt5 import uic, QtCore, QtWidgets file = '/home/tanshu/Programming/summer/summer/QtDesignerFiles/ListForm.ui' base, form = uic.loadUiType(file) class TaxList(base, form): def __init__(self, router, taxes, parent=None): super(TaxList, self).__init__() self.setupUi(self) self.translateUi() self.router = router self.taxes = taxes self.model = TaxsTableModel(taxes) self.tblItems.setModel(self.model) self.tblItems.doubleClicked.connect(self.show_tax) self.btnAddNew.clicked.connect(self.add_new_tax) self.setAttribute(QtCore.Qt.WA_DeleteOnClose, True) self.tblItems.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows) def translateUi(self): self.setObjectName("TaxList") _translate = QtCore.QCoreApplication.translate self.setWindowTitle(_translate("ListForm", "Taxes")) self.btnAddNew.setText(_translate("ListForm", "Add Tax")) def update_data(self, data): self.taxes = data self.model = TaxsTableModel(self.taxes) self.tblItems.setModel(self.model) def show_tax(self, index): tax = self.model.taxes[index.row()] self.router.show_tax(tax['TaxID']) def add_new_tax(self): self.router.show_tax(None) class TaxsTableModel(QtCore.QAbstractTableModel): def __init__(self, taxes=None, parent=None): QtCore.QAbstractTableModel.__init__(self, parent) self.taxes = taxes if taxes is not None else [] def rowCount(self, parent): return len(self.taxes) def columnCount(self, parent): return 3 def data(self, index, role): if role == QtCore.Qt.DisplayRole: item = self.taxes[index.row()] column = index.column() if column == 0: return item['Name'] elif column == 1: return '{0:,.2f}%'.format(item['Rate'] * 100) elif column == 2: return item['IsFixture'] def headerData(self, section, orientation, role): if role == QtCore.Qt.DisplayRole: if orientation == QtCore.Qt.Horizontal: if section == 0: return 'Name' elif section == 1: return 'Rate' elif section == 2: return 'Is Fixture?' else: return section + 1