def __init__(self): super(Grille, self).__init__() self.setupUi(self) self.model1 = QtSql.QSqlRelationalTableModel() self.model1.setTable('operations') self.model2 = QtSql.QSqlRelationalTableModel() self.model2.setTable('employes') self.grille.setRowCount(self.model2.rowCount()) self.grille.setColumnCount(self.model1.rowCount())
def __init__(self, tableName, newDB, parent=None): super(PersonEditor, self).__init__(parent) if newDB: self.createTable() #self.model = QtSql.QSqlTableModel(self) self.model = QtSql.QSqlRelationalTableModel(self) self.model.setTable(tableName) self.model.setEditStrategy(QtSql.QSqlTableModel.OnManualSubmit) #self.model.setEditStrategy(QtSql.QSqlTableModel.OnFieldChange) self.model.setRelation(3, QtSql.QSqlRelation('gender', 'id', 'name')) for c in range(self.model.columnCount()): self.model.setHeaderData(c, QtCore.Qt.Horizontal, self.tr(self.model.record().fieldName(c))) self.model.select() self.view = QtWidgets.QTableView() self.view.setModel(self.model) self.view.setItemDelegate(QtSql.QSqlRelationalDelegate(self.view)) self.view.resizeColumnsToContents() buttons = Buttons(self) mainLayout = QtWidgets.QVBoxLayout() mainLayout.addWidget(self.view) mainLayout.addWidget(buttons.buttonBox) self.setLayout(mainLayout)
def __inti__(self, parent=None): #QtWidgets.QWidget.__init__(self, parent) #self.resize(300, 100) app = QtWidgets.QApplication(sys.argv) window = QtWidgets.QWidget() window.setWindowTitle("QRelationalSqlTableModel") con = QtSql.QSqlDatabase.addDatabase('QSQLITE') con.setDatabaseName('hl.db3') con.open() stm = QtSql.QSqlRelationalTableModel(parent=window) stm.setTable('good') stm.setSort(1, QtCore.Qt.AscendingOrder) # Задаем для поля категории связь с таблицей списка категорий stm.setRelation(3, QtSql.QSqlRelation('category', 'id', 'catname')) stm.select() stm.setHeaderData(1, QtCore.Qt.Horizontal, 'Название') stm.setHeaderData(2, QtCore.Qt.Horizontal, 'Кол-во') stm.setHeaderData(3, QtCore.Qt.Horizontal, 'Категория') vbox = QtWidgets.QVBoxLayout() tv = QtWidgets.QTableView() tv.setModel(stm) tv.hideColumn(0) tv.setColumnWidth(1, 150) tv.setColumnWidth(2, 60) tv.setColumnWidth(3, 150) vbox.addWidget(tv) btnAdd = QtWidgets.QPushButton("&Добавить запись") btnAdd.clicked.connect(addRecord) vbox.addWidget(btnAdd) btnDel = QtWidgets.QPushButton("&Удалить запись") btnDel.clicked.connect(delRecord) vbox.addWidget(btnDel)
def __init__(self): super(Ajout_Competence, self).__init__() self.setupUi(self) self.model = QtSql.QSqlRelationalTableModel() self.model.setTable('competences') self.model.setRelation( 1, QtSql.QSqlRelation("operations", "code_op", "code_op")) self.model.setRelation( 0, QtSql.QSqlRelation("employes", "matricule", "matricule")) #self.model.setRelation(0,QtSql.QSqlRelation("employe", "matricule", "nom")) #self.model.setRelation(0,QtSql.QSqlRelation("employe", "matricule", "prenom")) self.model.select() self.relationModel = self.model.relationModel(1) self.op_cmp_aj.setModel(self.relationModel) self.op_cmp_aj.setModelColumn(self.relationModel.fieldIndex("code_op")) self.relationModel2 = self.model.relationModel(0) self.mat_cmp_aj.setModel(self.relationModel2) self.mat_cmp_aj.setModelColumn( self.relationModel2.fieldIndex("matricule")) #self.mat_cmp_aj.currentIndexChanged.connect(self.add_info) self.annuler_cmp.clicked.connect(self.toListe) #self.initialiser_aj_cmp.clicked.connect(self.initialise) self.enregistrer_cmp.clicked.connect(self.add)
def initialise(self): self.code_op.clear() self.nom_op.clear() self.machine_op.clear() self.model2 = QtSql.QSqlRelationalTableModel() self.model2.setTable('operations') self.tableView.setModel(self.model2) self.model2.select() self.fill(self.model2)
def initialise(self): self.line_ouvr_cmp.clear() self.op_cmp.clear() self.comp_cmp.clear() self.model2 = QtSql.QSqlRelationalTableModel() self.model2.setTable('competences') self.competence.setModel(self.model2) self.model2.select() self.fill(self.model2)
def __init__(self): super(Login, self).__init__() self.setupUi(self) self.model = QtSql.QSqlRelationalTableModel() self.model.setTable('utilisateur') self.model.select() print(self.model.select) print(self.model.rowCount) self.login.clicked.connect(self.submit)
def InfoResultSummas(self): sql = QtSql.QSqlRelationalTableModel() query = "select * from info_summas('{}');".format(self.snils) sqlQuery = QtSql.QSqlQuery(query) sql.setQuery(sqlQuery) sql.setHeaderData(0, 0x1, 'Месяц') sql.setHeaderData(1, 0x1, 'Месячные выплаты') sql.setHeaderData(2, 0x1, 'Итог с начала года') sql.setHeaderData(3, 0x1, 'Год') self.table.setModel(sql)
def InfoPension(self): query = "select * from InfoPension('{}');".format(self.snils) sqlQuery = QtSql.QSqlQuery(query) sql = QtSql.QSqlRelationalTableModel() sql.setQuery(sqlQuery) sql.setHeaderData(0, 0x1, 'Тип пенсии') sql.setHeaderData(1, 0x1, 'Пенсия') sql.setHeaderData(2, 0x1, 'Выплата') self.table.setModel(sql)
def __init__(self): super(Ajouter_Employe, self).__init__() self.setupUi(self) # session = Session() self.model = QtSql.QSqlRelationalTableModel() self.model.setTable('employes') self.model.select() self.annuler_emp.clicked.connect(self.toListe) self.enregistrer_emp.clicked.connect(self.add) self.initialiser_emp.clicked.connect(self.initialise)
def initialise(self): self.cin_emp.clear() self.mat_emp.clear() self.nom_emp.clear() self.prenom_emp.clear() self.model2 = QtSql.QSqlRelationalTableModel() self.model2.setTable('employes') self.table_emp.setModel(self.model2) self.model2.select() self.fill(self.model2)
def InfoWorkExperience(self): sqlQuery = QtSql.QSqlQuery( "select * from info_work_experience('{}');".format(self.snils)) sql = QtSql.QSqlRelationalTableModel() sql.setQuery(sqlQuery) sql.setHeaderData(0, 0x1, 'Опыт работы') sql.setHeaderData(1, 0x1, 'Страховой взнос') sql.setHeaderData(2, 0x1, 'Место работы') self.table.setModel(sql)
def InfoAboutRetiree(self): sql = QtSql.QSqlRelationalTableModel() sqlQuery = QtSql.QSqlQuery("select * from info_retiree('{}');".format( self.snils)) sql.setQuery(sqlQuery) sql.setHeaderData(0, 0x1, 'Фамилия') sql.setHeaderData(1, 0x1, 'Имя') sql.setHeaderData(2, 0x1, 'Отчество') sql.setHeaderData(3, 0x1, 'Дата регистрации') sql.setHeaderData(4, 0x1, 'СНИЛС') sql.setHeaderData(5, 0x1, 'Адрес') self.table.setModel(sql)
def createModel(self): self.model = QtSql.QSqlRelationalTableModel() self.model.setTable("agent") self.model.setHeaderData(0, Qt.Horizontal, "name") self.model.setHeaderData(1, Qt.Horizontal, "address") self.model.setHeaderData(2, Qt.Horizontal, "phone") self.model.setHeaderData(2, Qt.Horizontal, "region") self.model.setRelation( 2, QtSql.QSqlRelation("regions", "regionId", "region")) self.model.select()
def createModel(self): self.model = QtSql.QSqlRelationalTableModel() self.model.setTable("Books") self.model.setHeaderData(0, Qt.Horizontal, "BookId") self.model.setHeaderData(1, Qt.Horizontal, "Title") self.model.setHeaderData(2, Qt.Horizontal, "Author") self.model.setRelation( 2, QtSql.QSqlRelation("Authors", "AuthorId", "Name")) self.model.select()
def model_setup(self): self.logger.info("Initializing Model") tie_model = QtSql.QSqlRelationalTableModel(self) tie_model.setTable("ties") tie_model.setHeaderData(1, QtCore.Qt.Horizontal, "Team 1") tie_model.setHeaderData(2, QtCore.Qt.Horizontal, "Team 2") tie_model.setHeaderData(3, QtCore.Qt.Horizontal, "Event") tie_model.setHeaderData(4, QtCore.Qt.Horizontal, "Winner") tie_model.setRelation(1, QtSql.QSqlRelation("teams", "id", "Name")) tie_model.setRelation(2, QtSql.QSqlRelation("teams", "id", "Name")) tie_model.setRelation(4, QtSql.QSqlRelation("teams", "id", "Name")) tie_model.setEditStrategy(QtSql.QSqlTableModel.OnFieldChange) tie_model.select() self.model = tie_model self.model.dataChanged.connect(self.update_min_width)
def __init__(self): super(Liste_Employe, self).__init__() self.setupUi(self) self.model = QtSql.QSqlRelationalTableModel() self.model.setTable('employes') self.model.setEditStrategy(QtSql.QSqlTableModel.OnManualSubmit) self.table_emp.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectItems) self.table_emp.setModel(self.model) self.model.select() self.fill(self.model) self.initialiser_emp.clicked.connect(self.initialise) self.rechercher_emp.clicked.connect(self.search) self.ajouter_emp.clicked.connect(self.toAdd) self.Modifier_emp.clicked.connect(self.edit) self.supprimer_emp.clicked.connect(self.delete_row)
def __init__(self, parent=None): model = QtSql.QSqlRelationalTableModel() model.setTable(u'ПиццаЗаказ') model.setRelation(1, QtSql.QSqlRelation(u"Пицца", u"код", u"название")) model.setHeaderData(1, QtCore.Qt.Horizontal, u"Наименование пиццы", QtCore.Qt.DisplayRole) model.setRelation(2, QtSql.QSqlRelation(u"Заказ", u"код", u"статус")) model.setHeaderData(2, QtCore.Qt.Horizontal, u"Статус заказа", QtCore.Qt.DisplayRole) model.setRelation(3, QtSql.QSqlRelation(u"Клиенты", u"код", u"адрес")) model.setHeaderData(3, QtCore.Qt.Horizontal, u"Адрес доставки", QtCore.Qt.DisplayRole) model.select() super(PageOrders, self).__init__(model, appname, parent)
def __init__(self, a_control_db_connection: Connection, a_db_name: str, a_settings: Settings, a_parent=None): """ Для отображения таблицы измерений используется QSqlRelationalTableModel (это сильно упрощает жизнь) При этом для остальных операций (добавление, удаление) используется другое соединение sqlite3.Connection Соединения могут быть подключены к БД параллельно :param a_control_db_connection: Соединения для управления БД :param a_db_name: Имя файла БД :param a_settings: Настройки в ini :param a_parent: Widget parent """ super().__init__(a_parent) self.ui = StartForm() self.ui.setupUi(self) self.parent = a_parent self.settings = a_settings self.setWindowTitle("Калибратор N4-25") self.ui.source_mode_button.clicked.connect(self.source_mode_chosen) self.ui.no_template_mode_button.clicked.connect( self.no_template_mode_chosen) self.ui.template_mode_button.clicked.connect(self.template_mode_chosen) self.ui.create_protocol_button.clicked.connect(self.create_protocol) self.ui.measures_table.doubleClicked.connect(self.create_protocol) self.parent.show() geometry = self.settings.get_last_geometry(self.__class__.__name__) if not geometry.isEmpty(): self.parent.restoreGeometry(geometry) else: self.parent.resize(self.size()) self.control_db_connection = a_control_db_connection self.measure_db = MeasuresDB(a_control_db_connection) self.display_db_connection = QtSql.QSqlDatabase.addDatabase("QSQLITE") self.display_db_model = QtSql.QSqlRelationalTableModel(self) self.sort_proxy_model = CustomSortingModel(self) self.header_context = self.config_measure_table(a_db_name)
def __init__(self): super(Liste_Competence, self).__init__() self.setupUi(self) self.model = QtSql.QSqlRelationalTableModel() self.model.setTable('competences') self.model.setEditStrategy(QtSql.QSqlTableModel.OnManualSubmit) self.competence.setSelectionBehavior( QtWidgets.QAbstractItemView.SelectItems) self.competence.setEditTriggers( QtWidgets.QAbstractItemView.NoEditTriggers) self.model.select() self.fill(self.model) self.initialiser_cmp.clicked.connect(self.initialise) self.rechercher_cmp.clicked.connect(self.search) self.affecter_cmp.clicked.connect(self.toAdd) self.modifier_cmp.clicked.connect(self.edit) self.supprimer_cmp.clicked.connect(self.delete_row)
def get_sql_model(): db = QtSql.QSqlDatabase('QSQLITE') db.setDatabaseName('db/chinook.db') db.open() model = QtSql.QSqlRelationalTableModel(db=db) model.setTable('tracks') model.setRelation(2, QtSql.QSqlRelation('albums', 'AlbumId', 'Title')) model.setRelation(3, QtSql.QSqlRelation('media_types', 'MediaTypeId', 'Name')) model.setRelation(4, QtSql.QSqlRelation('genres', 'GenreId', 'Name')) model.setEditStrategy(QtSql.QSqlTableModel.OnManualSubmit) model.select() # model.setHeaderData(0, QtCore.Qt.Horizontal, "ID") # model.setHeaderData(1, QtCore.Qt.Horizontal, "First name") # model.setHeaderData(2, QtCore.Qt.Horizontal, "Last name") return model
def __init__(self, table_name: str, parent=None): super().__init__() self.parent = parent self.model = QtSql.QSqlRelationalTableModel(parent) self.model.setEditStrategy(QtSql.QSqlTableModel.OnManualSubmit) self.model.setTable(table_name) self._init_relations(table_name) self.model.select() self.view = QTableView(parent) self.view.setModel(self.model) if table_name == 'schedule' or table_name == 'subjects': self.view.setItemDelegate(QtSql.QSqlRelationalDelegate(self.view)) self.view.resizeColumnsToContents() self.view.verticalHeader().setVisible(False)
def __init__(self, log, cfg, db, api, tbl_name, name, parent=None): self.log = log self.cfg = cfg self.db = db self.api = api self.tbl_name = tbl_name self.o_name = name self.log.info("Конструктор окна отгрузки") QtWidgets.QWidget.__init__(self, parent) self.setupUi(self) self.printer = QtPrintSupport.QPrinter() self.printer.setResolution(203) self.stm = QtSql.QSqlRelationalTableModel(self) self.stm.setTable(self.tbl_name) self.stm.setHeaderData(0, QtCore.Qt.Horizontal, 'Модель') self.stm.setHeaderData(1, QtCore.Qt.Horizontal, 'Размер') self.stm.setHeaderData(2, QtCore.Qt.Horizontal, 'GTIN') self.stm.setHeaderData(3, QtCore.Qt.Horizontal, 'Сырье') self.stm.setHeaderData(4, QtCore.Qt.Horizontal, 'Количество') self.stm.setHeaderData(5, QtCore.Qt.Horizontal, 'Напечатано') self.stm.setHeaderData(6, QtCore.Qt.Horizontal, 'Доступно') self.stm.setRelation(0, QtSql.QSqlRelation("GTINS", 'GTIN', 'MODEL')) self.stm.setRelation(1, QtSql.QSqlRelation("GTINS", 'GTIN', 'SIZE')) self.stm.setSort(3, QtCore.Qt.AscendingOrder) self.stm.select() self.table.setModel(self.stm) self.table.setColumnWidth(2, 180) self.list, self.models = self.readGtins() self.model.addItems(self.list) self.model.activated.connect(self.buildSizes) self.btnAdd.clicked.connect(self.add) self.btnDelete.clicked.connect(self.delete) self.prn.clicked.connect(self.doPrn)
def setupUi(self, Dialog): Dialog.setObjectName("Dialog") Dialog.resize(1057, 722) self.verticalLayout_3 = QtWidgets.QVBoxLayout(Dialog) self.verticalLayout_3.setObjectName("verticalLayout_3") self.tableView = QtWidgets.QTableView(Dialog) self.tableView.setObjectName("tableView") self.verticalLayout_3.addWidget(self.tableView) self.pushButton = QtWidgets.QPushButton(Dialog) self.pushButton.setObjectName("pushButton") self.verticalLayout_3.addWidget(self.pushButton) self.retranslateUi(Dialog) QtCore.QMetaObject.connectSlotsByName(Dialog) self.pushButton.clicked.connect(self.dispData) JPDb().getQSqlDatabase() self.Model = QtSql.QSqlRelationalTableModel() self.Model.setTable('ttt') # Relation = QtSql.QSqlRelation("t_enumeration", "fItemID", "fTitle") # self.Model.setRelation(3, Relation) #Model.setFilter("False") self.Model.setSort(1, Qt.DescendingOrder) # header = ['文档编号', # '发文日期', # '文号', # '文件类型', # '文件标题', # '发文单位', # '关键字', # '是否手续文件', # '是否任务来源', # '是否进度文件', # '涉及项目数', # '涉及项目'] # for i, r in enumerate(header): # self.Model.setHeaderData(i, Qt.Horizontal, r) self.tableView.setModel(self.Model)
def on_u_catalog_btn(parent, db_path): def on_add_user(): # Добавляем строку um.insertRow(um.rowCount()) def on_del_user(): # Удаляем строку um.removeRow(umv.currentIndex().row()) # Выполняем повторное считывание данных в модель, # чтобы убрать пустую "мусорную" запись um.select() def on_data_change(um): um.submitAll() # Считаем количество записей после сохранения query = QtSql.QSqlQuery() query.exec("SELECT COUNT(*) AS new_count FROM users") query.next() recordCount = query.record() new_count_int = query.value(recordCount.indexOf("new_count")) if old_count_int != new_count_int: msg_lbl = QLabel( '<span style="color:green">Добавлен новый пользователь</span>') parent.sm_list_widget.clear() parent.item = QListWidgetItem() parent.sm_list_widget.addItem(parent.item) parent.sm_list_widget.setItemWidget(parent.item, msg_lbl) # Устанавливаем соединение с базой данных con = QtSql.QSqlDatabase.addDatabase('QSQLITE') con.setDatabaseName(db_path) con.open() # Создаем окно parent.u_table_window = QWidget() parent.u_table_window.setWindowModality(QtCore.Qt.ApplicationModal) parent.u_table_window.setWindowTitle("Справочник 'Пользователи'") parent.u_table_window.resize(440, 300) # Создаем модель um = QtSql.QSqlRelationalTableModel(parent=parent.u_table_window) # Связываем таблицу с моделью um.setTable('users') um.setSort(0, QtCore.Qt.AscendingOrder) # Устанавливаем связь с внешней таблицей um.setRelation(4, QtSql.QSqlRelation('rules', 'rule', 'rule')) # Считываем данные в модель um.select() # Задаем заголовки для столбцов модели um.setHeaderData(1, QtCore.Qt.Horizontal, 'Логин') um.setHeaderData(2, QtCore.Qt.Horizontal, 'Пароль') um.setHeaderData(3, QtCore.Qt.Horizontal, 'Имя') um.setHeaderData(4, QtCore.Qt.Horizontal, 'Права') # При изменении данных выполняем сохранение # Считаем количество записей до сохранения query = QtSql.QSqlQuery() query.exec("SELECT COUNT(*) AS old_count FROM users") query.next() recordCount = query.record() old_count_int = query.value(recordCount.indexOf("old_count")) query.finish() um.dataChanged.connect(lambda: on_data_change(um)) # Создаем виджет-таблицу umv = QTableView() # Связываем модель с виджетом-таблицей umv.setModel(um) umv.setItemDelegate(QtSql.QSqlRelationalDelegate(umv)) umv.hideColumn(0) # Создаем контейнер users_vbox = QVBoxLayout() users_vbox.addWidget(umv) # Создаем кнопки и размещаем их в контейнеры btnAdd = QPushButton("Добавить пользователя") btnAdd.clicked.connect(on_add_user) users_vbox.addWidget(btnAdd) btnDel = QPushButton("Удалить пользователя") btnDel.clicked.connect(on_del_user) users_vbox.addWidget(btnDel) # Размещаем контейнер в окне parent.u_table_window.setLayout(users_vbox) parent.u_table_window.show() screen = QDesktopWidget().screenGeometry() x = int((screen.width() - parent.u_table_window.width()) / 2) y = int((screen.height() - parent.u_table_window.height()) / 2) parent.u_table_window.move(x, y)
def __init__(self): """MainWindow constructor. Code in this method should define window properties, create backend resources, etc. """ super().__init__() # Code starts here self.stack = qtw.QStackedWidget() self.setCentralWidget(self.stack) # Connect to the database db = qts.QSqlDatabase.addDatabase('QSQLITE') db.setDatabaseName('coffee.db') if not db.open(): qtw.QMessageBox.critical( None, 'DB Connection Error', 'Could not open database file: ' f'{db.lastError().text()}') sys.exit(1) # Check for missing tables required_tables = {'roasts', 'coffees', 'reviews'} missing_tables = required_tables - set(db.tables()) if missing_tables: qtw.QMessageBox.critical( None, 'DB Integrity Error', 'Missing tables, please repair DB: ' f'{missing_tables}') sys.exit(1) # Create the models self.reviews_model = qts.QSqlTableModel() self.reviews_model.setTable('reviews') self.coffees_model = qts.QSqlRelationalTableModel() self.coffees_model.setTable('coffees') self.coffees_model.setRelation( self.coffees_model.fieldIndex('roast_id'), qts.QSqlRelation('roasts', 'id', 'description') ) self.coffees_model.setEditStrategy(0) self.coffees_model.dataChanged.connect(print) self.coffee_list = qtw.QTableView() self.coffee_list.setModel(self.coffees_model) self.stack.addWidget(self.coffee_list) self.coffees_model.select() #self.show() #return self.show_list() # Inserting and deleting rows. toolbar = self.addToolBar('Controls') toolbar.addAction('Delete Coffee(s)', self.delete_coffee) toolbar.addAction('Add Coffee', self.add_coffee) self.coffee_list.setItemDelegate(qts.QSqlRelationalDelegate()) #self.show() #return # The coffee form self.coffee_form = CoffeeForm( self.coffees_model, self.reviews_model ) self.stack.addWidget(self.coffee_form) self.coffee_list.doubleClicked.connect( self.coffee_form.show_coffee) self.coffee_list.doubleClicked.connect( lambda: self.stack.setCurrentWidget(self.coffee_form)) toolbar.addAction("Back to list", self.show_list) # Code ends here self.show()
def on_e_catalog_btn(parent, db_path): def on_add_employee(): em.insertRow(em.rowCount()) def on_del_employee(): em.removeRow(emv.currentIndex().row()) em.select() def on_data_change(em): em.submitAll() # Считаем количество записей после сохранения query = QtSql.QSqlQuery() query.exec("SELECT COUNT(*) AS new_count FROM employee") query.next() recordCount = query.record() new_count_int = query.value(recordCount.indexOf("new_count")) if old_count_int != new_count_int: msg_lbl = QLabel( '<span style="color:green">Добавлен новый сотрудник</span>') parent.sm_list_widget.clear() parent.item = QListWidgetItem() parent.sm_list_widget.addItem(parent.item) parent.sm_list_widget.setItemWidget(parent.item, msg_lbl) con = QtSql.QSqlDatabase.addDatabase('QSQLITE') con.setDatabaseName(db_path) con.open() parent.employee_table_window = QWidget() parent.employee_table_window.setWindowModality( QtCore.Qt.ApplicationModal) parent.employee_table_window.setWindowTitle("Список сотрудников") parent.employee_table_window.resize(240, 250) em = QtSql.QSqlRelationalTableModel( parent=parent.employee_table_window) em.setTable('employee') em.setSort(0, QtCore.Qt.AscendingOrder) em.setRelation( 2, QtSql.QSqlRelation( 'positions', 'position', 'position')) em.select() em.setHeaderData(1, QtCore.Qt.Horizontal, 'ФИО') em.setHeaderData(2, QtCore.Qt.Horizontal, 'Должность') emv = QTableView() emv.setModel(em) emv.setItemDelegate(QtSql.QSqlRelationalDelegate(emv)) emv.hideColumn(0) vbox = QVBoxLayout() vbox.addWidget(emv) btnAdd = QPushButton("Добавить сотрудника") btnAdd.clicked.connect(on_add_employee) vbox.addWidget(btnAdd) btnDel = QPushButton("Удалить сотрудника") btnDel.clicked.connect(on_del_employee) vbox.addWidget(btnDel) parent.employee_table_window.setLayout(vbox) parent.employee_table_window.show() # Считаем количество записей до сохранения query = QtSql.QSqlQuery() query.exec("SELECT COUNT(*) AS old_count FROM employee") query.next() recordCount = query.record() old_count_int = query.value(recordCount.indexOf("old_count")) query.finish() em.dataChanged.connect(lambda: on_data_change(em)) screen = QDesktopWidget().screenGeometry() x = int((screen.width() - parent.employee_table_window.width()) / 2) y = int((screen.height() - parent.employee_table_window.height()) / 2) parent.employee_table_window.move(x, y)
def on_n_catalog_btn(parent, db_path): def on_add_item(): nm.insertRow(nm.rowCount()) nm_row_count = nm.rowCount() img_btn = QPushButton("Выбрать") img_btn.setStyleSheet( "border-width: 1px;" "border-style: solid;" "border-color: dimgray;" "border-radius: 4px;" "background-color: silver;") img_btn.clicked.connect(on_img_choose) img_btn.setFixedSize(90, 25) cell = nm.index(nm_row_count - 1, 4) nmv.setIndexWidget(cell, img_btn) def on_del_item(): nm.removeRow(nmv.currentIndex().row()) nm.select() empty_lbl = QLabel() parent.setCentralWidget(empty_lbl) parent.cdw.setWidget(empty_lbl) parent.ldw_tree_model.removeRows(0, parent.ldw_tree_model.rowCount()) con = sqlite3.connect(db_path) cur = con.cursor() sql_cats_select = """\ SELECT DISTINCT item_cat FROM nomenclature """ cur.execute(sql_cats_select) arr = cur.fetchall() for cat in arr: sql_items_select = "SELECT item_name FROM nomenclature \ WHERE item_cat = ?" cur.execute(sql_items_select, [cat[0]]) items = cur.fetchall() parent_item = QStandardItem(cat[0]) parent.ldw_tree_model.appendRow(parent_item) j = 0 for item in items: child_item = QStandardItem(item[0]) parent_item.setChild(j, 0, child_item) j = j + 1 parent.ldw_tree.setModel(parent.ldw_tree_model) def on_img_choose(): cur_index = nmv.currentIndex().row() numb_txt = nm.index(cur_index, 0).data() item_form_class.on_form_open(parent.nom_table_window, numb_txt, db_path, parent) con = QtSql.QSqlDatabase.addDatabase('QSQLITE') con.setDatabaseName(db_path) con.open() parent.nom_table_window = QWidget() parent.nom_table_window.setWindowModality(QtCore.Qt.ApplicationModal) parent.nom_table_window.setWindowTitle("Номенклатура товаров") parent.nom_table_window.resize(760, 250) nm = QtSql.QSqlRelationalTableModel(parent=parent.nom_table_window) nm.setTable('nomenclature') nm.setSort(0, QtCore.Qt.AscendingOrder) nm.setRelation(2, QtSql.QSqlRelation('units', 'unit', 'unit')) nm.setRelation( 3, QtSql.QSqlRelation( 'categories', 'category', 'category')) nm.select() nmv = QTableView() nmv.setModel(nm) nmv.setItemDelegate(QtSql.QSqlRelationalDelegate(nmv)) nmv.setColumnWidth(0, 130) nmv.setColumnWidth(1, 320) nmv.setColumnWidth(2, 50) nmv.setColumnWidth(3, 130) nmv.setColumnWidth(4, 90) # Задаем заголовки для столбцов модели nm.setHeaderData(0, QtCore.Qt.Horizontal, 'Номенклатурный №') nm.setHeaderData(1, QtCore.Qt.Horizontal, 'Название') nm.setHeaderData(2, QtCore.Qt.Horizontal, 'Ед. изм.') nm.setHeaderData(3, QtCore.Qt.Horizontal, 'Категория') nm.setHeaderData(4, QtCore.Qt.Horizontal, 'Изображение') items_vbox = QVBoxLayout() items_vbox.addWidget(nmv) nm_row_count = nm.rowCount() for index in range(nm_row_count): img_btn = QPushButton("Выбрать") img_btn.setStyleSheet( "border-width: 1px;" "border-style: solid;" "border-color: dimgray;" "border-radius: 4px;" "background-color: silver;") img_btn.clicked.connect(on_img_choose) img_btn.setFixedSize(90, 25) cell = nm.index(index, 4) nmv.setIndexWidget(cell, img_btn) btnAdd = QPushButton("Добавить товар") btnAdd.clicked.connect(on_add_item) items_vbox.addWidget(btnAdd) btnDel = QPushButton("Удалить товар") btnDel.clicked.connect(on_del_item) items_vbox.addWidget(btnDel) parent.nom_table_window.setLayout(items_vbox) parent.nom_table_window.show() # Считаем количество записей до сохранения query = QtSql.QSqlQuery() query.exec("SELECT COUNT(*) AS old_count FROM nomenclature") query.next() recordCount = query.record() old_count_int = query.value(recordCount.indexOf("old_count")) query.finish() print(nm.dataChanged.connect(nm.submitAll)) screen = QDesktopWidget().screenGeometry() x = int((screen.width() - parent.nom_table_window.width()) / 2) y = int((screen.height() - parent.nom_table_window.height()) / 2) parent.nom_table_window.move(x, y)
def addRecord(): stm.insertRow(stm.rowCount()) def delRecord(): stm.removeRow(tv.currentIndex().row()) stm.select() app = QtWidgets.QApplication(sys.argv) window = QtWidgets.QWidget() window.setWindowTitle("QRelationalSqlTableModel") con = QtSql.QSqlDatabase.addDatabase('QSQLITE') con.setDatabaseName('data.sqlite') con.open() stm = QtSql.QSqlRelationalTableModel(parent=window) stm.setTable('good') stm.setSort(1, QtCore.Qt.AscendingOrder) # Задаем для поля категории связь с таблицей списка категорий stm.setRelation(3, QtSql.QSqlRelation('category', 'id', 'catname')) stm.select() stm.setHeaderData(1, QtCore.Qt.Horizontal, 'Название') stm.setHeaderData(2, QtCore.Qt.Horizontal, 'Кол-во') stm.setHeaderData(3, QtCore.Qt.Horizontal, 'Категория') vbox = QtWidgets.QVBoxLayout() tv = QtWidgets.QTableView() tv.setModel(stm) tv.setItemDelegateForColumn(3, QtSql.QSqlRelationalDelegate(tv)) tv.hideColumn(0) tv.setColumnWidth(1, 150) tv.setColumnWidth(2, 60)
import sys import re from PyQt5 import QtWidgets, QtGui, QtCore, QtSql TRACE = True MY_TABLE = "person" db = QtSql.QSqlDatabase.addDatabase("QSQLITE") db.setDatabaseName(":memory:") modelQuery = QtSql.QSqlQueryModel() modelTable = QtSql.QSqlRelationalTableModel() g_hits_count = 0 g_total_count = 0 g_selected_count = 0 def trace(message): if TRACE: print(message) def _human_key(key): parts = re.split(r"(\d*\.\d+|\d+)", key) return tuple( (e.swapcase() if i % 2 == 0 else float(e)) for i, e in enumerate(parts) ) class dlgDetail(QtWidgets.QDialog):