Esempio n. 1
0
 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)
Esempio n. 3
0
    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)
Esempio n. 4
0
    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)
Esempio n. 5
0
 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)
Esempio n. 6
0
 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)
Esempio n. 7
0
 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)
Esempio n. 8
0
 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)
Esempio n. 9
0
    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)
Esempio n. 10
0
 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)
Esempio n. 11
0
 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)
Esempio n. 12
0
    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)
Esempio n. 13
0
 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)
Esempio n. 14
0
    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()
Esempio n. 15
0
    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()
Esempio n. 16
0
 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)
Esempio n. 17
0
 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)
Esempio n. 18
0
    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)
Esempio n. 19
0
    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)
Esempio n. 20
0
 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)
Esempio n. 21
0
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
Esempio n. 22
0
    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)
Esempio n. 23
0
    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)
Esempio n. 24
0
    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)
Esempio n. 26
0
    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)
Esempio n. 29
0
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)
Esempio n. 30
0
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):