class TwoWindow(QtWidgets.QDialog): def __init__(self, root, id=None, state=None): super().__init__(root) self.ui = Ui_Dialog() self.ui.setupUi(self) self.ui.tableWidget.setSelectionBehavior(QAbstractItemView.SelectRows) self.ui.pushButton_2.clicked.connect(self.add) self.ui.pushButton.clicked.connect(self.delfac) self.setWindowModality(Qt.ApplicationModal) self.bd = Orm() self.state = state self.id = id if id: if self.state == 1: data = self.bd.allfac(self.id) elif self.state == 2: res = self.bd.getres(self.id) fio = res.name + " " + res.family[0] + ". " + res.patronymic[ 0] + '.' data = self.bd.resfacil(fio) elif self.state == 3: cons = self.bd.getcons(self.id) data = self.bd.consfacil(cons.facility) # self.id = id # data = self.bd.allfac(self.id) self.now(data) self.idfac = False def now(self, data): if data: self.ui.tableWidget.setEnabled(True) self.ui.pushButton.setEnabled(True) # ряды и столбцы self.ui.tableWidget.setRowCount(len(data)) self.ui.tableWidget.setColumnCount(len(data[0])) self.ui.tableWidget.setHorizontalHeaderLabels( ('Id', 'Имя(кто взял материалы)', 'объект', 'Наличие счета', 'Наличие накладных', 'Количество', 'Ед.изм')) row = 0 for tup in data: col = 0 for item in tup: cellinfo = QTableWidgetItem(str(item)) cellinfo.setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) self.ui.tableWidget.setItem(row, col, cellinfo) col += 1 row += 1 self.ui.tableWidget.resizeColumnsToContents() self.ui.tableWidget.horizontalHeader().setSectionResizeMode( col - 1, QHeaderView.Stretch) else: self.ui.tableWidget.clear() self.ui.tableWidget.setEnabled(False) self.ui.pushButton.setEnabled(False) def add(self): self.dualog = AddFacility(self.id) self.dualog.exec() self.now(self.bd.allfac(self.id)) @pyqtSlot(QModelIndex) def on_tableWidget_clicked( self, index: QModelIndex): # получение индекса строки при нажатие self.idfac = int(self.ui.tableWidget.item(index.row(), 0).text()) def delfac(self): if not self.idfac: self.now(self.bd.allfac(self.id)) msg = QMessageBox() msg.setWindowTitle("Ошибка") msg.setText("Вы не выбрали не один объект") msg.addButton('Ок', QMessageBox.RejectRole) msg.exec() else: # print(self.idfac) self.bd.delfac(self.idfac) self.now(self.bd.allfac(self.id))
class MainWindow(QtWidgets.QMainWindow): def __init__(self): super().__init__() self.ui = Ui_MainWindow() self.ui.setupUi(self) self.ui.tableWidget.setSelectionBehavior(QAbstractItemView.SelectRows) self.state = 1 self.ui.pushButton.clicked.connect(self.addfac) self.ui.pushButton_2.clicked.connect(self.addmat) self.ui.pushButton_3.clicked.connect(self.delmat) self.ui.pushButton_4.clicked.connect(self.search) self.ui.pushButton_5.hide() self.ui.pushButton_5.clicked.connect(self.tomain) self.ui.pushButton_6.clicked.connect(self.update) # Материалы self.ui.pushButton_7.clicked.connect( self.constructionObject) # обьекты self.ui.pushButton_8.clicked.connect( self.responsible) # Ответсстевенные self.ui.pushButton_9.clicked.connect( self.addres) # добавить сотрудника self.ui.pushButton_10.clicked.connect(self.addcon) # добавить обьект self.ui.pushButton_9.hide() # добавить сотрудника self.ui.pushButton_10.hide() # добавить обьект self.bd = Orm() self.now(self.bd.allmat(), self.state) self.id = False def update(self): self.state = 1 self.now(self.bd.allmat(), 1) self.ui.pushButton.show() self.ui.pushButton_2.show() self.ui.pushButton_4.show() self.ui.pushButton_6.show() self.ui.pushButton_9.hide() self.ui.pushButton_5.hide() self.ui.pushButton_10.hide() def now(self, data, state): if data: self.ui.tableWidget.setEnabled(True) self.ui.pushButton_3.setEnabled(True) self.ui.pushButton_4.setEnabled(True) # ряды и столбцы self.ui.tableWidget.setRowCount(len(data)) self.ui.tableWidget.setColumnCount(len(data[0])) if state == 1: self.ui.tableWidget.setHorizontalHeaderLabels( ('Номер', 'Название материала', 'Фирма', 'Магазин', 'Поставщик', 'Наличие счета', 'Наличие НДС', 'Количество', 'Общее количество', 'Ед.изм', 'Цена за ед.Грн', 'Общая цена.Грн')) elif state == 2: self.ui.tableWidget.setHorizontalHeaderLabels( ('Номер', 'Имя', 'Фамилия', 'Отчество', 'Должность')) elif state == 3: self.ui.tableWidget.setHorizontalHeaderLabels( ('Номер', 'Объект', 'Адрес', 'Договор')) row = 0 for tup in data: col = 0 for item in tup: cellinfo = QTableWidgetItem(str(item)) cellinfo.setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) self.ui.tableWidget.setItem(row, col, cellinfo) # self.ui.tableWidget.horizontalHeader().setSectionResizeMode(col , QHeaderView.Stretch) col += 1 row += 1 self.ui.tableWidget.resizeColumnsToContents() self.ui.tableWidget.horizontalHeader().setSectionResizeMode( col - 1, QHeaderView.Stretch) else: self.ui.tableWidget.clear() self.ui.tableWidget.setEnabled(False) self.ui.pushButton_3.setEnabled(False) self.ui.pushButton_4.setEnabled(False) def addmat(self): self.dualog = AddMaterial() self.dualog.exec() self.now(self.bd.allmat(), self.state) def addfac(self): if not self.id: self.now(self.bd.allmat(), self.state) msg = QMessageBox() msg.setWindowTitle("Ошибка") msg.setText("Вы не выбрали не один договор") msg.addButton('Ок', QMessageBox.RejectRole) msg.exec() else: # print(self.id) self.now(self.bd.allmat(), self.state) self.dualog2 = AddFacility(self.id) self.dualog2.exec() self.now(self.bd.allmat(), self.state) def delmat(self): # проблема с индексами после удаления state = self.state if state == 1: if not self.id: self.now(self.bd.allmat(), state) msg = QMessageBox() msg.setWindowTitle("Ошибка") msg.setText("Вы не выбрали не одну запись") msg.addButton('Ок', QMessageBox.RejectRole) msg.exec() else: self.bd.delmat(self.id) self.now(self.bd.allmat(), state) self.id = False elif state == 2: if not self.id: self.now(self.bd.allres(), state) msg = QMessageBox() msg.setWindowTitle("Ошибка") msg.setText("Вы не выбрали не одну запись") msg.addButton('Ок', QMessageBox.RejectRole) msg.exec() else: # print(self.id) self.bd.delres(self.id) self.now(self.bd.allres(), state) self.id = False elif state == 3: if not self.id: self.now(self.bd.allcon(), state) msg = QMessageBox() msg.setWindowTitle("Ошибка") msg.setText("Вы не выбрали не одну запись") msg.addButton('Ок', QMessageBox.RejectRole) msg.exec() else: # print(self.id) self.bd.delcon(self.id) self.now(self.bd.allcon(), state) self.id = False @pyqtSlot(QModelIndex) def on_tableWidget_clicked( self, index: QModelIndex): # получение индекса строки при нажатие self.id = int(self.ui.tableWidget.item(index.row(), 0).text()) @pyqtSlot(QModelIndex) def on_tableWidget_doubleClicked( self, index: QModelIndex): # получение списка обьектов r = int(self.ui.tableWidget.item(index.row(), 0).text()) if self.state == 1: data = self.bd.allfac(r) elif self.state == 2: res = self.bd.getres(r) fio = res.name + " " + res.family[0] + ". " + res.patronymic[ 0] + '.' data = self.bd.resfacil(fio) elif self.state == 3: cons = self.bd.getcons(r) data = self.bd.consfacil(cons.facility) if not data: msg = QMessageBox() msg.setWindowTitle("Ошибка") msg.setText("Нет записей") msg.addButton('Ок', QMessageBox.RejectRole) msg.exec() else: self.twow = TwoWindow(self, r, self.state) self.twow.show() def search(self): self.ui.pushButton_4.hide() self.ui.pushButton_5.show() self.search = InputDialog(self, self.state) self.search.exec() def tomain(self): self.ui.pushButton_5.hide() if self.state == 1: self.update() elif self.state == 2: self.responsible() elif self.state == 3: self.constructionObject() def responsible(self): self.state = 2 self.id = False self.now(self.bd.allres(), self.state) self.ui.pushButton.hide() self.ui.pushButton_2.hide() self.ui.pushButton_5.hide() self.ui.pushButton_4.show() self.ui.pushButton_6.show() self.ui.pushButton_9.show() self.ui.pushButton_10.hide() def addres(self): self.dualog3 = AddResponsible() self.dualog3.exec() self.now(self.bd.allres(), self.state) def constructionObject(self): self.state = 3 self.id = False self.now(self.bd.allcon(), self.state) self.ui.pushButton.hide() self.ui.pushButton_2.hide() self.ui.pushButton_9.hide() self.ui.pushButton_5.hide() self.ui.pushButton_10.show() self.ui.pushButton_4.show() self.ui.pushButton_6.show() def addcon(self): self.dualog4 = AddConstructionObject() self.dualog4.exec() self.now(self.bd.allcon(), self.state)