Esempio n. 1
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. 2
0
    def show_visitor(self):

        selected_building_id = self.get_selected_building_id()
        selected_city_id = self.get_selected_city_id()

        try:
            manager = visitor_manager.Visitor_manager(
                selected_building_id, selected_city_id,
                self.comboBoxVisitor.currentText(),
                self.lineEditVisitor.text(), self.loader)
            manager.add_visitor()
        except:
            return

        self.table_special_model.setEditStrategy(
            models.SqlTableModel.OnFieldChange)
        self.table_special_model.setTable('characters')
        self.set_special_table_header()
        self.table_special_model.setFilter(
            'visiting_id = {0}'.format(selected_building_id))
        self.table_special_model.setRelation(
            12, QtSql.QSqlRelation('cities', 'id', 'name'))
        self.table_special_model.setRelation(
            13, QtSql.QSqlRelation('buildings', 'id', 'name'))
        self.table_special_model.select()

        self.tableViewSpecial.resizeColumnsToContents()
Esempio n. 3
0
 def set_full_character_table(self):
     self.table_content_model.setEditStrategy(
         models.SqlTableModel.OnFieldChange)
     self.table_content_model.setTable('characters')
     self.set_view_table_header('characters')
     self.table_content_model.setRelation(
         12, QtSql.QSqlRelation('cities', 'id', 'name'))
     self.table_content_model.setRelation(
         13, QtSql.QSqlRelation('buildings', 'id', 'name'))
     self.table_content_model.select()
     self.tableViewContent.resizeColumnsToContents()
Esempio n. 4
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. 5
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)
    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. 7
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. 8
0
 def STMR(self,table,filt='',us=''):
     self.stmR.setEditStrategy(QtSql.QSqlTableModel.OnFieldChange)
     self.stmR.setTable(table)
     if filt !='':
         print("'"+filt+"'"+'='+"'"+us+"'")
         self.stmR.setFilter(filt+'='+"'"+us+"'")
     self.stmR.setRelation(1, QtSql.QSqlRelation('bands','ID','nameB'))
     self.stmR.select()
     return self.stmR
Esempio n. 9
0
 def set_building_table(self, city_id):
     self.table_content_model.setEditStrategy(
         models.SqlTableModel.OnFieldChange)
     self.table_content_model.setTable('buildings')
     self.set_view_table_header('buildings')
     self.table_content_model.setFilter('city_id = {0}'.format(city_id))
     self.table_content_model.setRelation(
         4, QtSql.QSqlRelation('cities', 'id', 'name'))
     self.table_content_model.select()
     self.tableViewContent.resizeColumnsToContents()
Esempio n. 10
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. 11
0
    def __init__(self, parent):
        QtSql.QSqlRelationalTableModel.__init__(self, parent)
        self.header = [
            'ID', 'Directory', 'Field', 'Component Name', 'Units', 'Scale',
            'Offset', 'Attribute', 'Tags'
        ]

        self.setTable('environment')
        self.setJoinMode(QtSql.QSqlRelationalTableModel.LeftJoin)
        self.setRelation(
            7, QtSql.QSqlRelation('ref_env_attributes', 'code', 'code'))
        self.setRelation(4,
                         QtSql.QSqlRelation('ref_speed_units', 'code', 'code'))
        self.setRelation(
            3,
            QtSql.QSqlRelation('components', 'component_name',
                               'component_name'))
        self.setEditStrategy(QtSql.QSqlTableModel.OnFieldChange)
        self.select()
Esempio n. 12
0
def setViewModel(tblName=None,
                 filtro=None,
                 lstVal2Rel=None,
                 lstRelTblName=None,
                 lstNewNames=None,
                 sort=0):
    '''
    Funcao para settar (ahahahaha) ou configurar o modelo, usando o built in relationTable.
    Tem como objectivo facilitar o mapeamento e visualizacao de dados, o modelo tem como 
    princinpal objectivo o uso na vizulizacao de dados em mapper e Views. 
    O Metodo tem a habilida de ser util em passando todos paramentros ou nao mais o paramentro
    fundamental e tblName.
    
    Args:
        tblName = Nome da tabela aqual queremos ligar na base de dados,  (Obrigatorio)
        filtro = filtro ou where e como desejamaos filtrar, (opicional)
        lstVal2Rel = os valores que desejamos fazer a relacao, (opicional)
        lstRelTblName = a tabela aqual desejamaos nos relacionar (obrigatorio se o campo anterior foi passado)
        lstNewNames =  os novos nomes que irao aparecer no header  (opicional)
        sort = como desejamos organizar a tabela por padrao e sempre o primeiro elemento e pode ser mudado (opicional)
    
    dictModel['val2Rel'] = lstVal2Rel
    dictModel["relTblName"] = lstRelTblName
    dictModel['newNames'] = lstNewNames
    '''
    bOK = False
    try:
        Model = QSqlRelationalTableModel()
        Model.setTable(tblName)
        if filtro is not None:  #verificacao do Filtro
            Model.setFilter(filtro)
        if lstVal2Rel is not None and lstRelTblName is not None:  #verificacao da lista de valores relacionais
            for idx, val in enumerate(lstVal2Rel):
                if val is not None:
                    Model.setRelation(
                        idx,
                        QtSql.QSqlRelation(lstRelTblName[idx], val[0], val[1]))
                    Model.setJoinMode(QSqlRelationalTableModel.LeftJoin)
        if lstNewNames is not None:
            for idx, val in enumerate(
                    lstNewNames):  #verificao dos Novos nomes na tabela
                Model.setHeaderData(idx, Qt.Horizontal, val)
        Model.setSort(sort, Qt.AscendingOrder)
        bOK = Model.select()

        if not bOK:
            msg.error(txt="Erro na configuracao do Modelo",
                      verbTxt=str(Model.lastError().text()))
            return (bOK, Model)
        else:
            return (bOK, Model)

    except TypeError as TE:
        msg.error(txt="Erro na configuracao do Modelo", verbTxt=str(TE))
        return (bOK, None)
Esempio n. 13
0
    def show_selected_family(self):

        selected_character = self.get_characters_from_db(
            'id', self.get_selected_character_id())
        selected_character = selected_character[0]
        selected_family_id = selected_character.family_id

        self.table_special_model.setEditStrategy(
            models.SqlTableModel.OnFieldChange)
        self.table_special_model.setTable('characters')
        self.set_special_table_header()
        self.table_special_model.setFilter(
            'family_id = {0}'.format(selected_family_id))  # Parent
        self.table_special_model.setRelation(
            12, QtSql.QSqlRelation('cities', 'id', 'name'))
        self.table_special_model.setRelation(
            13, QtSql.QSqlRelation('buildings', 'id', 'name'))
        self.table_special_model.select()

        self.tableViewSpecial.resizeColumnsToContents()
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 __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. 16
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. 17
0
 def setViewModel(self):
     self.Model = QSqlRelationalTableModel()
     self.Model.setTable(self.TblName)
     self.Model.setFilter(self.filtro)
     for idx, val in enumerate (self.dictModel['val2Rel']):
         if val is not None:
             self.Model.setRelation(idx, QtSql.QSqlRelation(self.dictModel["relTblName"][idx], val[0], val[1]))  
     self.Model.setSort(0, Qt.AscendingOrder)
     for idx, val in enumerate (self.dictModel['newNames']):
         self.Model.setHeaderData(idx, Qt.Horizontal, val)
     bOK = self.Model.select()
     if not bOK:
         self.msg.error(txt="Erro na configuracao do Modelo", verbTxt=str(self.Model.lastError().text()))
Esempio n. 18
0
    def load(self, db):
        self.db = db
        if self.name not in self.db.tables():
            self.create(self.db)

        self.model = SqlRelationalTableModel(self.parentRef.model, None, db)
        self.model.setEditStrategy(QtSql.QSqlTableModel.OnFieldChange)
        self.model.setTable(self.name)
        parentIndex = self.model.fieldIndex('parentid')
        self.model.setRelation(parentIndex,
                           QtSql.QSqlRelation(self.parentName, 'id', 'value'))

        self.reload()
         def ModelTableViewLink (MyTableView, MyTableName):
             MyModel = MyTableModel()
             MyModel.ConfigTable(MyTableName,cfgDB.DicTable[MyTableName][0],
                                             cfgDB.DicTable[MyTableName][1],
                                             cfgDB.DicTable[MyTableName][2])
             for row in cfgDB.DicJoin[MyTableName]:
                 (NumColumn,(SqlTable, SqlKey, SqlDesc)) = row
                 MyModel.setRelation(NumColumn,QtSql.QSqlRelation(SqlTable, SqlKey, SqlDesc))

             MyTableView.setModel(MyModel) 
             MyTableView.setSortingEnabled(True)
             if len(cfgDB.DicJoin[MyTableName])>0:
                MyTableView.setItemDelegate(QtSql.QSqlRelationalDelegate(MyTableView))
             MyTableView.show()   
Esempio n. 20
0
def setViewModel(tblName=None, filtro=None, lstVal2Rel=None, lstRelTblName=None,lstNewNames=None, sort=0):
    '''
    Funcao para configurar o modelos[model] Relacionais.
    Tem como objectivo facilitar visualizacao de dados.
    Este Modelo aconcelho a usar para #dict Style 
    
    Args:
        tblName = Nome da tabela aqual queremos ligar na base de dados,  (Obrigatorio)
        filtro = filtro ou where e como desejamaos filtrar, (opicional)
        lstVal2Rel = os valores que desejamos fazer a relacao, (opicional)
        lstRelTblName = a tabela aqual desejamaos nos relacionar (obrigatorio se o campo anterior foi passado)
        lstNewNames =  os novos nomes que irao aparecer no header  (opicional)
        sort = como desejamos organizar a tabela por padrao e sempre o primeiro elemento e pode ser mudado (opicional)
    
    dictModel['val2Rel'] = lstVal2Rel
    dictModel['relTblName'] = lstRelTblName
    dictModel['newNames'] = lstNewNames
    '''
    bOK = False
    try:
        Model = QSqlRelationalTableModel()#Cria o object QSqlRelationalTableModel
        Model.setTable(tblName) #Atribuimos uma tabela ao objecto criado
        if filtro is not None: #Verifica se Lhe foi atribuido um Filtro
            Model.setFilter(filtro) #Caso tenha sido atribuido Colocamos o filtro
        if lstVal2Rel is not None and lstRelTblName is not None: #Vericamos se as listas de valores e tabelas relacionais estao vazias
            for idx, val in enumerate (lstVal2Rel):#Caso nao estejam vazias 
                if val is not None:
                    Model.setRelation(idx, QtSql.QSqlRelation(lstRelTblName[idx], val[0], val[1]))  #atribuimos uma relacao a cada valor com a devida Tabela a que pertence
                    Model.setJoinMode(QSqlRelationalTableModel.LeftJoin)#Identificamos o tipo de relacao 
        if lstNewNames is not None:#Verificamos se lhe foi atribuida uma lista de novos nome[headers]
            for idx, val in enumerate (lstNewNames): #Levamos para cada nome 
                Model.setHeaderData(idx, Qt.Horizontal, val)#Atribuimos a cada valos no nosso objecto
        Model.setSort(sort, Qt.AscendingOrder) #Organizado em ordem crescente
        bOK = Model.select() #Metodo para executar todas mudancas (select), que se todos os campos acima foram correctamentes prenchenchos retoma Verdade caso contrario Falso
        
        if not bOK: #Se a Excucao foi Falsa entao mostramos a menssagem de error.
            msg.error(txt="Erro na configuracao do Modelo", verbTxt=str(Model.lastError().text()))
            return (bOK, Model)
        else:
            return (bOK, Model)#Se correr tudo bem Retorna Verdade e o Modelo Criaado
        
    except TypeError as TE:#Se a Excucao foi Falsa entao mostramos a menssagem de error, isto e nos casos mais extremos.
        msg.error(txt="Erro na configuracao do Modelo", verbTxt=str(TE))
        return (bOK, None)
Esempio n. 21
0
    def config_measure_table(self, a_db_name: str):
        self.display_db_connection.setDatabaseName(a_db_name)
        res = self.display_db_connection.open()
        assert res, "Can't open database {0}!".format(a_db_name)

        self.display_db_model.setTable("measures")
        self.display_db_model.setRelation(
            MeasureColumn.DEVICE_SYSTEM,
            QtSql.QSqlRelation("system", "id", "name"))

        for column in range(self.display_db_model.columnCount()):
            self.display_db_model.setHeaderData(column, QtCore.Qt.Horizontal,
                                                MEASURE_COLUMN_TO_NAME[column])

        self.sort_proxy_model.setSourceModel(self.display_db_model)
        self.ui.measures_table.setModel(self.sort_proxy_model)

        # Чтобы был приятный цвет выделения
        self.ui.measures_table.setItemDelegate(
            NonOverlappingDoubleClick(self.ui.measures_table))

        self.ui.measures_table.selectionModel().currentChanged.connect(
            self.current_selection_changed)
        self.ui.measures_table.selectionModel().modelChanged.connect(
            self.current_selection_changed)
        self.ui.measures_table.selectionModel().selectionChanged.connect(
            self.current_selection_changed)

        self.ui.measures_table.horizontalHeader().restoreState(
            self.settings.get_last_header_state(self.__class__.__name__))
        self.ui.measures_table.setColumnHidden(MeasureColumn.ID, True)

        header_context = qt_utils.TableHeaderContextMenu(
            self, self.ui.measures_table, True)
        self.ui.measures_table.horizontalHeader().setSectionsMovable(True)
        self.ui.measures_table.customContextMenuRequested.connect(
            self.show_table_custom_menu)

        self.update_table()
        return header_context
Esempio n. 22
0
    def setupUi(self):
        self.centralwidget = QtWidgets.QWidget(self)
        hBox = QtWidgets.QHBoxLayout(self.centralwidget)

        self.treeView = QtWidgets.QTreeView(self.centralwidget)

        self.treeView.setRootIsDecorated(False)
        self.treeView.setSortingEnabled(True)
        self.treeView.setAlternatingRowColors(True)
        self.treeView.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers)
        self.treeView.setSelectionMode(QtWidgets.QAbstractItemView.ExtendedSelection)
        self.treeView.header().setStretchLastSection(True)

        hBox.addWidget(self.treeView)
        self.setCentralWidget(self.centralwidget)

        header = FilterHeader(self.treeView)
        self.treeView.setHeader(header)
        # self.treeView.sortByColumn(2, QtCore.Qt.DescendingOrder)

        # StatusBar
        self.statusBar = QtWidgets.QStatusBar()
        self.setStatusBar(self.statusBar)

        # ToolBar
        exitAct = QtWidgets.QAction(
            "Exit", self, shortcut="Ctrl+Q", triggered=QtWidgets.qApp.quit
        )
        newRecordAct = QtWidgets.QAction(
            "New", self, shortcut="Ctrl+N", triggered=self.new_record
        )
        editRecordAct = QtWidgets.QAction(
            "Edit", self, shortcut="Return", triggered=self.edit_record
        )
        refreshAct = QtWidgets.QAction(
            "Refresh", self, shortcut="F5", triggered=self.refresh
        )

        self.toolbar = self.addToolBar("Exit")
        self.toolbar.addAction(exitAct)
        self.toolbar.addSeparator()
        self.toolbar.addAction(newRecordAct)
        self.toolbar.addAction(editRecordAct)
        self.toolbar.addSeparator()
        self.toolbar.addAction(refreshAct)

        modelTable.setTable(MY_TABLE)

        modelTable.setHeaderData(0, QtCore.Qt.Horizontal, "row id")
        modelTable.setHeaderData(1, QtCore.Qt.Horizontal, "ID")
        modelTable.setHeaderData(2, QtCore.Qt.Horizontal, "Last Name")
        modelTable.setHeaderData(3, QtCore.Qt.Horizontal, "First Name")
        modelTable.setHeaderData(4, QtCore.Qt.Horizontal, "Country")

        modelTable.setRelation(4, QtSql.QSqlRelation("country", "id", "name"))

        modelTable.setEditStrategy(QtSql.QSqlTableModel.OnManualSubmit)

        self.treeView.setModel(
            modelTable
        )  # display data of the SQLTableModel into the QTreeView
        if not TRACE:
            self.treeView.setColumnHidden(0, True)

        # enable human sorting
        proxy = HumanProxyModel(self)
        proxy.setSourceModel(modelTable)
        self.treeView.setModel(proxy)

        # enable filtering
        header.setFilterBoxes(modelTable.columnCount())
        header.filterActivated.connect(self.handleFilterActivated)

        # update counters
        global g_total_count, g_hits_count
        g_total_count = modelTable.rowCount()
        g_hits_count = g_total_count
        self.updateStatus()
Esempio n. 23
0
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)
tv.setColumnWidth(3, 150)
vbox.addWidget(tv)
btnAdd = QtWidgets.QPushButton("&Добавить запись")
btnAdd.clicked.connect(addRecord)
    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. 25
0

app = QtWidgets.QApplication(sys.argv)
window = QtWidgets.QWidget()
window.setWindowTitle('Список друзей')

con1 = QtSql.QSqlDatabase.addDatabase('QSQLITE')
con1.setDatabaseName('mydb.sqlite')
con1.open()

stm = QtSql.QSqlRelationalTableModel(parent=window)
stm.setEditStrategy(QtSql.QSqlTableModel.OnManualSubmit)
stm.setTable('Contacts')
# stm.setSort(1, QtCore.Qt.AscendingOrder)

stm.setRelation(1, QtSql.QSqlRelation('Users', 'UserId', 'Name'))
stm.setRelation(2, QtSql.QSqlRelation('Users', 'UserId', 'Name'))
stm.dataChanged.connect(stm.submitAll)
stm.select()
stm.setHeaderData(1, QtCore.Qt.Horizontal, 'Пользователь')
stm.setHeaderData(2, QtCore.Qt.Horizontal, 'Друг')
vbox = QtWidgets.QVBoxLayout()
tv = QtWidgets.QTableView()
tv.setModel(stm)
tv.setItemDelegateForColumn(1, QtSql.QSqlRelationalDelegate(tv))
tv.setItemDelegateForColumn(2, QtSql.QSqlRelationalDelegate(tv))
tv.hideColumn(0)
tv.setColumnWidth(1, 150)
tv.setColumnWidth(2, 150)
vbox.addWidget(tv)
btnAdd = QtWidgets.QPushButton('Добавить запись')
    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 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)
Esempio n. 28
0
    def _init_relations(self, table_name: str):
        if table_name == DataBaseTables.Schedule.value:
            self.model.setRelation(
                1,
                QtSql.QSqlRelation(
                    "groups",
                    "id",
                    "name"
                )
            )

            self.model.setHeaderData(
                1,
                Qt.Horizontal,
                'groups.name'
            )

            self.model.setRelation(
                3,
                QtSql.QSqlRelation(
                    "subjects",
                    "id",
                    "name"
                )
            )

            self.model.setHeaderData(
                3,
                Qt.Horizontal,
                'subjects.name'
            )

        elif table_name == DataBaseTables.Subjects.value:
            self.model.setRelation(
                2,
                QtSql.QSqlRelation(
                    "lectures",
                    "id",
                    "name"
                )
            )

            self.model.setHeaderData(
                2,
                Qt.Horizontal,
                'lectures.name'
            )

            self.model.setRelation(
                4,
                QtSql.QSqlRelation(
                    "teachers",
                    "id",
                    "name"
                )
            )

            self.model.setHeaderData(
                4,
                Qt.Horizontal,
                'teachers.name'
            )
Esempio n. 29
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()
Esempio n. 30
0

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('library')
stm.setSort(1, QtCore.Qt.AscendingOrder)
# Задаем для поля категории связь с таблицей списка категорий
stm.setRelation(
    10,
    QtSql.QSqlRelation('author_name', 'author_secondname', 'author_otchestvo',
                       'name_book', 'book_yearprint', 'publishing',
                       'locate_storage', 'on_storage', 'quarcode_add',
                       'date_bookadd'))
stm.select()
stm.setHeaderData(1, QtCore.Qt.Horizontal, 'Имя')
stm.setHeaderData(2, QtCore.Qt.Horizontal, 'Фамилия')
stm.setHeaderData(3, QtCore.Qt.Horizontal, 'Отчество')
stm.setHeaderData(4, QtCore.Qt.Horizontal, 'Название книги')
stm.setHeaderData(5, QtCore.Qt.Horizontal, 'Год издания')
stm.setHeaderData(6, QtCore.Qt.Horizontal, 'Издательство')
stm.setHeaderData(7, QtCore.Qt.Horizontal, 'Место в библиотеке')
stm.setHeaderData(8, QtCore.Qt.Horizontal, 'На месте ли книги')
stm.setHeaderData(9, QtCore.Qt.Horizontal, 'QR')
stm.setHeaderData(10, QtCore.Qt.Horizontal, 'Дата добавления')
#stm.setHeaderData(11, QtCore.Qt.Horizontal, 'Категория')
vbox = QtWidgets.QVBoxLayout()
tv = QtWidgets.QTableView()