コード例 #1
0
ファイル: database.py プロジェクト: oversoul/notes-app
	def data(self, QModelIndex, role=None):
		v = QSqlTableModel.data(self, QModelIndex, role)
		if role == Qt.BackgroundRole:
			index = self.index(QModelIndex.row(), 2)
			color = QSqlTableModel.data(self, index, Qt.DisplayRole)
			if color:
				return QColor(color)
		return (v)
コード例 #2
0
ファイル: frontend.py プロジェクト: tinval/easylit2
 def data(self, index, role=Qt.DisplayRole):
     if role == SortRole:
         value = QSqlTableModel.data(self, index, role=Qt.DisplayRole)
         try:
             return int(value)
         except:
             return value
     else:
         return QSqlTableModel.data(self, index, role)
コード例 #3
0
class SqlModel(object):
    def __init__(self,databasetype="QSQLITE",databasename="data.db",sqltablename="里程碑"):
        db=QSqlDatabase.addDatabase(databasetype)
        db.setDatabaseName(databasename)
        self.sqltablename=sqltablename
        self.__tablemodel()
    def __tablemodel(self):
        self.model=QSqlTableModel()
        self.model.setTable(self.sqltablename)
        self.model.setEditStrategy(QSqlTableModel.OnFieldChange)
        self.model.select()
    def modelview(self):
        self.view=QTableView()
        self.view.setModel(self.model)
        # modelwidget=QTabWidget()
        # modelwidget.addTab(self.view, viewname)
        return self.view
    def tabadd(self):
        row = self.model.rowCount()
        self.model.insertRow(row)
        index = self.model.index(row)
        self.view.setCurrentIndex(index)
        self.view.edit(index)
    def tabdel(self):
        index = self.modelview().currentIndex()
        print(index)
        # self.model.removeRow(index.row())
    def tabupdate(self):

        self.model.updateRowInTable()
    def row(self):
        row=self.model.rowCount()
        return row
    def line(self):
        line=self.model.columnCount()
        return line
    def rowvalue(self):
        rowvalue=self.model.insertRowIntoTable(QSqlRecord="")
    def data(self):
        self.model.data()
    def run(self,WindowTitle= "data"):
        app = QApplication(sys.argv)
        dig=QDialog()
        layout=QHBoxLayout()
        layout.addWidget(self.modelview())
        dig.setLayout(layout)
        dig.setWindowTitle(WindowTitle)
        dig.resize(430,450)
        # dig.hide()
        # time.sleep(10)
        dig.show()
        sys.exit(app.exec_())
コード例 #4
0
ファイル: getRooms.py プロジェクト: niknefed/hostel_swsu
class Lodgers(QtWidgets.QMainWindow, Ui_lodgers):
    def __init__(self, parent=None):
        super(Lodgers, self).__init__(parent)
        self.setupUi(self)

        sdb = QSqlDatabase.addDatabase('QSQLITE')
        sdb.setDatabaseName('baza.db')
        sdb.open()
        self.model = QSqlTableModel(db=sdb)
        self.model.setTable("users")
        self.model.setEditStrategy(QSqlTableModel.OnFieldChange)
        self.model.select()

        self.tableView_1.setModel(self.model)

        self.rоом_beds = []

        self.pushButton_9.clicked.connect(
            self.on_add_record)  # Добавить запись
        self.pushButton_10.clicked.connect(
            self.on_del_record)  # Удалить запись

    def on_add_record(self):
        row = self.tableView_1.selectionModel().currentIndex().row()
        if self.tableView_1.selectionModel().currentIndex().row() == -1:
            row = 0
            self.model.insertRow(row)
        else:
            row = row + 1
            self.model.insertRow(row)

        self.model.setData(self.model.index(row, 0), 'ФИО NEW')
        self.model.setData(self.model.index(row, 1), '0000')
        self.model.setData(self.model.index(row, 2), '0')
        self.model.setData(self.model.index(row, 3), '0')
        self.model.submit()

    def on_del_record(self):
        self.model.removeRow(self.tableView_1.currentIndex().row())
        self.model.select()

    def _getRooms(self):
        self.rоом_beds = []
        for row in range(self.model.rowCount()):
            if self.model.data(self.model.index(row, 2)) == 1:
                rоом_bed = str(self.model.data(
                    self.model.index(row, 1)))[:3], \
                           str(self.model.data(self.model.index(row, 1)))[3]
                self.rоом_beds.append(rоом_bed)
コード例 #5
0
 def data(self, index, role=Qt.DisplayRole):
     value = super(ImportSqlTableModel, self).data(index)
     if index.column() in self.booleanSet:
         if role == Qt.CheckStateRole:
             return Qt.Unchecked if value == 2 else Qt.Checked
         else:
             return QVariant()
     return QSqlTableModel.data(self, index, role)
コード例 #6
0
    def data(self, index, rol):
        if rol < Qt.UserRole:
            return QSqlTableModel.data(self, index, rol)

        sql_kayit = QSqlRecord()
        sql_kayit = self.record(index.row())

        return sql_kayit.value(rol - Qt.UserRole)
コード例 #7
0
    def data(self, index, role):
        if role < Qt.UserRole:
            return QSqlTableModel.data(self, index, role)

        record = self.record(index.row())

        if role < Qt.UserRole + self.columnCount():
            column = role - Qt.UserRole - 1
            return record.value(column)

        dataValue = record.value('itemData')
        data = deserializeData(dataValue)

        if role == self.itemHtmlRole:
            return data.get(mimeHtml, '')

        if role == self.itemHasImage:
            return mimePng in data

        return None
コード例 #8
0
ファイル: view.py プロジェクト: lihao2333/raspberry
class View(QtWidgets.QTableView):
    def __init__(self, name, parent=None):
        QtWidgets.QTableView.__init__(self, parent)
        #设置所有表的基本信息
        getDBs = (self.getLocalDB,self.getLocalDB, self.getLocalDB\
           ,self.getServerDB,self.getLocalDB,\
           self.getLocalDB,self.getLocalDB,self.getLocalDB)
        #建立基本结构
        self.viewId = viewNames.index(name)
        self.db = getDBs[self.viewId](name)
        self.model = QSqlTableModel(self, self.db)
        self.setModel(self.model)
        self.show()
        print(self.model.lastError().text())
        #添加属性
        self.setSelectionMode(QtWidgets.QAbstractItemView.MultiSelection)
        self.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)
        self.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers)

    def getKeys(self):
        indexs = self.selectedIndexes()
        rowCnt = int(len(indexs) / self.model.columnCount())
        indexs = numpy.array(indexs).reshape(rowCnt, self.model.columnCount())
        values = []
        values_temp = []
        for index in indexs:
            values_temp = []
            for keyColumn in keyColumns[self.viewId]:
                values_temp.append(self.model.data(index[keyColumn]))
            if len(keyColumns[self.viewId]) == 1: values.append(values_temp[0])
            else: values.append(tuple(values_temp))
        return tuple(values)

    def filter(self, *args):
        if self.viewId == 3:
            #如果是examExamServer的话,为了添加is_download,必须把本地exam的ids作为形参输入
            keys = getKeysExamExamLocal()
            args = list(args)
            args.append(keys)
        self.query = QSqlQuery(getQuerys[self.viewId](*args), self.db)
        self.model.setQuery(self.query)
        print(self.model.lastError().text())
        self.update()

    def getLocalDB(self, dbName):
        db = QSqlDatabase.addDatabase("QPSQL", dbName + '%f' % random.random())
        #db = QSqlDatabase.addDatabase("QPSQL",dbName)
        db.setHostName(config.localDBHost)
        db.setPort(config.localDBPort)
        db.setDatabaseName(config.localDBName)
        db.setUserName(config.localDBUser)
        db.setPassword(config.localDBPasswd)
        if (db.open() == False):
            QtWidgets.QMessageBox.critical(None, "Database Error",
                                           db.lastError().text())
        return db

    def getServerDB(self, dbName):
        db = QSqlDatabase.addDatabase("QPSQL", dbName)
        db.setHostName(config.serverDBHost)
        db.setPort(config.serverDBPort)
        db.setDatabaseName(config.serverDBName)
        db.setUserName(config.serverDBUser)
        db.setPassword(config.serverDBPasswd)
        if (db.open() == False):
            QtWidgets.QMessageBox.critical(None, "Database Error",
                                           db.lastError().text())
        return db
コード例 #9
0
class TableToTreeModel2(QAbstractItemModel):
    """
    Более новый вариант - используем композицию, то есть абстрактная модель
    включает в себя sql табличную модель только для работы с базой данных
    """
    def __init__(self, m, connection):
        QAbstractItemModel.__init__(self, m)

        # попробуем сделать композицию
        self.dbmodel = QSqlTableModel(self, connection)
        self.dbmodel.setEditStrategy(0)  # при каждом изменении поля
        #print (self.dbmodel.hasIndex(1,12))

        self.headers = [
            'id', '_buy', 'deadline', 'made', 'significance', 'urgency',
            '_children', '_next', '_parents', '_prev', 'season', 'short text',
            'tags', 'text'
        ]

        self.rootItem = TreeItem(self.headers)

    def setTable(self, tname):
        self.dbmodel.setTable(tname)

    def select(self):
        self.dbmodel.select()
        #здесь должны грузиться данные

        dct = dict()  #словарь айди - список строк с данными

        for ind in range(self.dbmodel.rowCount()):
            #dct[int(self.dbmodel.data(self.dbmodel.index(ind,0)))] = [self.dbmodel.data(self.dbmodel.index(ind,j)) for j in range(self.dbmodel.columnCount())]
            dct[int(self.dbmodel.data(self.dbmodel.index(ind, 0)))] = [
                self.dbmodel.data(self.dbmodel.index(ind, j))
                for j in range(self.dbmodel.columnCount())
            ]

        def find_children_and_append(item: TreeItem, dct):
            chlist = eval(item.data(6))
            for ch in chlist:
                tri = TreeItem(dct[ch], item)
                if tri.data(6) != '[]':
                    find_children_and_append(tri, dct)
                item.appendChild(tri)

        for i in [j for j in dct.values() if j[8] == '[]']:
            tri = TreeItem(i, self.rootItem)
            find_children_and_append(tri, dct)
            self.rootItem.appendChild(tri)

    def columnCount(self, QModelIndex_parent=None, *args, **kwargs):
        return self.dbmodel.columnCount()

    def data(self, index, role):
        if not index.isValid():
            return None
        if role != Qt.DisplayRole:
            return None
        item = index.internalPointer()
        return item.data(index.column())

    def flags(self, index):
        if not index.isValid():
            return Qt.NoItemFlags
        return Qt.ItemIsEnabled | Qt.ItemIsSelectable | Qt.ItemIsEditable

    def headerData(self, section, orientation, role):
        if orientation == Qt.Horizontal and role == Qt.DisplayRole:
            return self.headers[section]
            #return self.dbmodel.headerData(section,orientation,role)

    def index(self, row, column, parent):
        if not self.hasIndex(row, column, parent):
            return QModelIndex()
        if not parent.isValid():
            parentItem = self.rootItem
        else:
            parentItem = parent.internalPointer()
        childItem = parentItem.child(row)
        if childItem:
            return self.createIndex(row, column, childItem)
        else:
            return QModelIndex()

    def rowCount(self, parent):
        if parent.column() > 0:
            return 0
        if not parent.isValid():
            parentItem = self.rootItem
        else:
            parentItem = parent.internalPointer()
        return parentItem.childCount()

    def parent(self, index):
        if not index.isValid():
            return QModelIndex()
        childItem = index.internalPointer()
        parentItem = childItem.parent()
        if parentItem == self.rootItem:
            return QModelIndex()
        return self.createIndex(parentItem.row(), 0, parentItem)

    def getIndexById(self, _id):
        for i in range(self.dbmodel.rowCount()):
            if int(self.dbmodel.data(self.dbmodel.index(i, 0))) == _id:
                return self.dbmodel.index(i, 0)
        return QModelIndex()

    def setData(self, modelIndex, value, int_role=Qt.EditRole):
        """
        Функция вызывается при установке данных
        :param QModelIndex:
        :param QVariant:
        :param int_role:
        :return:
        """

        print(self.dbmodel.record(0).setValue(12, 'sdfsfsdf'))

        r = self.dbmodel.record(1)

        r.setValue(12, 'Krevedko')
        print(self.dbmodel.setRecord(0, r))

        print(r)

        return 1
コード例 #10
0
class TableToTreeModel2 (QAbstractItemModel):
    """
    Более новый вариант - используем композицию, то есть абстрактная модель
    включает в себя sql табличную модель только для работы с базой данных
    """

    def __init__(self, m, connection):
        QAbstractItemModel.__init__(self, m)

        # попробуем сделать композицию
        self.dbmodel = QSqlTableModel(self, connection)
        self.dbmodel.setEditStrategy(0) # при каждом изменении поля
        #print (self.dbmodel.hasIndex(1,12))


        self.headers=['id',
                      '_buy',
                      'deadline',
                      'made',
                      'significance',
                      'urgency',
                      '_children',
                      '_next',
                      '_parents',
                      '_prev',
                      'season',
                      'short text',
                      'tags',
                      'text']

        self.rootItem = TreeItem (self.headers)

    def setTable(self, tname):
        self.dbmodel.setTable(tname)

    def select(self):
        self.dbmodel.select()
        #здесь должны грузиться данные


        dct = dict () #словарь айди - список строк с данными

        for ind in range (self.dbmodel.rowCount()):
            #dct[int(self.dbmodel.data(self.dbmodel.index(ind,0)))] = [self.dbmodel.data(self.dbmodel.index(ind,j)) for j in range(self.dbmodel.columnCount())]
            dct[int(self.dbmodel.data(self.dbmodel.index(ind,0)))] = [self.dbmodel.data(self.dbmodel.index(ind,j)) for j in range(self.dbmodel.columnCount())]


        def find_children_and_append (item:TreeItem, dct):
            chlist = eval(item.data(6))
            for ch in chlist:
                tri = TreeItem(dct[ch], item)
                if tri.data(6) != '[]':
                    find_children_and_append(tri,dct)
                item.appendChild(tri)



        for i in [j for j in dct.values() if j[8]=='[]']:
            tri = TreeItem(i, self.rootItem)
            find_children_and_append(tri,dct)
            self.rootItem.appendChild(tri)




    def columnCount(self, QModelIndex_parent=None, *args, **kwargs):
        return self.dbmodel.columnCount()

    def data(self, index, role):
        if not index.isValid():
            return None
        if role != Qt.DisplayRole:
            return None
        item = index.internalPointer()
        return item.data(index.column())

    def flags(self, index):
        if not index.isValid():
            return Qt.NoItemFlags
        return Qt.ItemIsEnabled | Qt.ItemIsSelectable |Qt.ItemIsEditable

    def headerData(self, section, orientation, role):
        if orientation == Qt.Horizontal and role == Qt.DisplayRole:
            return self.headers[section]
            #return self.dbmodel.headerData(section,orientation,role)


    def index(self, row, column, parent):
        if not self.hasIndex(row, column, parent):
            return QModelIndex()
        if not parent.isValid():
            parentItem = self.rootItem
        else:
            parentItem = parent.internalPointer()
        childItem = parentItem.child(row)
        if childItem:
            return self.createIndex(row, column, childItem)
        else:
            return QModelIndex()

    def rowCount(self, parent):
        if parent.column() > 0:
            return 0
        if not parent.isValid():
            parentItem = self.rootItem
        else:
            parentItem = parent.internalPointer()
        return parentItem.childCount()

    def parent(self, index):
        if not index.isValid():
            return QModelIndex()
        childItem = index.internalPointer()
        parentItem = childItem.parent()
        if parentItem == self.rootItem:
            return QModelIndex()
        return self.createIndex(parentItem.row(), 0, parentItem)


    def getIndexById(self, _id):
        for i in range (self.dbmodel.rowCount()):
            if int (self.dbmodel.data(self.dbmodel.index(i,0)))==_id:
                return self.dbmodel.index(i,0)
        return QModelIndex()

    def setData(self, modelIndex, value, int_role=Qt.EditRole):
        """
        Функция вызывается при установке данных
        :param QModelIndex:
        :param QVariant:
        :param int_role:
        :return:
        """

        print (self.dbmodel.record(0).setValue(12, 'sdfsfsdf'))

        r = self.dbmodel.record(1)

        r.setValue(12, 'Krevedko')
        print (self.dbmodel.setRecord(0,r))


        print (r)




        return 1
コード例 #11
0
class MainWindow(QMainWindow, Ui_MainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()

        self.folder_path = QDir.current().path()
        self.init_ui()

    def init_ui(self):
        """Initialize ui."""
        self.setupUi(self)
        self.move_to_center()
        self.init_table_view()

        icon = QIcon('subtitle_analyze_gui.ico')
        self.setWindowIcon(icon)
        movie = QMovie('processing.gif')
        self.label.setMovie(movie)
        movie.start()
        self.label.setVisible(False)

        self.tableView.resizeColumnsToContents()
        self.tableView.resizeRowsToContents()
        self.tableView.horizontalHeader().setSectionResizeMode(
            QHeaderView.ResizeToContents)

        self.actionOpen_Folder.triggered.connect(self.open_folder)
        self.actionSave_As.triggered.connect(self.save_result)
        self.actionExit.triggered.connect(self.close)
        self.refreshPushButton.released.connect(self.refresh)

    def init_table_view(self):
        """Initialize the table view"""
        if not create_connection():
            sys.exit(1)
        self.model = QSqlTableModel()
        initialize_model(self.model)
        self.tableView.setModel(self.model)
        self.tableView.setSortingEnabled(True)
        reflesh_model(self.model)

    def move_to_center(self):
        """Move windows to the center of the screen."""
        screen = QDesktopWidget().screenGeometry()
        size = self.geometry()
        self.move((screen.width() - size.width()) / 2,
                  (screen.height() - size.height()) / 2)

    def open_folder(self):
        """Set target folder."""
        self.folder_path = QFileDialog.getExistingDirectory(
            self, 'Open the folder', QDir.currentPath())
        if not self.folder_path:
            self.folder_path = QDir.current().path()

    def save_result(self):
        """Save analyze result."""
        filename = QFileDialog.getSaveFileName(
            self, 'Save analyze result',
            os.path.join(QDir.current().path(), 'result.csv'), 'File (*.csv)')
        with open(filename[0], 'w', encoding='utf-8') as file:
            row = self.model.rowCount()
            col = self.model.columnCount()
            for i in range(row):
                text = ''
                for j in range(col):
                    text += str(self.model.data(self.model.index(i, j))) + '\t'
                text += '\n'
                file.writelines(text)

    def analyze_subtitle(self):
        """Analyze subtitles"""
        filename_list = get_subtitle_filename_list(self.folder_path, mode='r')
        result_dict = single_thread_analyze(filename_list)
        for key in result_dict.keys():
            add_record(result_dict[key][0], result_dict[key][1],
                       result_dict[key][2] / 1000, result_dict[key][3])

    def refresh(self):
        """Execute analysis task."""
        self.label.setVisible(True)
        self.refreshPushButton.setEnabled(False)

        reflesh_model(self.model)
        self.task_thread = TaskThread()
        self.task_thread.set_task(self.analyze_subtitle)
        self.task_thread.finish_signal.connect(self.process_thread_message)
        self.task_thread.start()

    def process_thread_message(self, message):
        """Processing thread message."""
        reflesh_model(self.model)
        self.label.setVisible(False)
        self.refreshPushButton.setEnabled(True)
コード例 #12
0
class MainMenu(QMainWindow):
    def __init__(self, parent=None):
        super(MainMenu, self).__init__(parent)

        # -----------------  UI  --------------------------#
        loadUi("./UI/main_ui.ui", self)
        self.setWindowTitle("密码保险柜")
        self.setWindowIcon(QIcon("./image/1.ico"))

        # -----------------  按键  --------------------------#
        self.pushButtonExit.clicked.connect(QCoreApplication.instance().quit)
        self.pushButtonDel.clicked.connect(self.delete)
        self.pushButtonAdd.clicked.connect(self.add)
        self.refresh.clicked.connect(self.reselect)

        # -----------------  db  --------------------------#
        self.db = QSqlDatabase.addDatabase("QSQLITE")
        self.db.setDatabaseName("./db/word.db")

        # -----------------  model  --------------------------#
        self.model = QSqlTableModel()
        self.model.setTable("warehouse")
        self.model.setSort(ID, Qt.AscendingOrder)
        self.model.setHeaderData(ID, Qt.Horizontal, "ID")
        self.model.setHeaderData(SITE, Qt.Horizontal, "站点")
        self.model.setHeaderData(NAME, Qt.Horizontal, "账号")
        self.model.setHeaderData(PASS, Qt.Horizontal, "密码")
        self.model.setHeaderData(REMARK, Qt.Horizontal, "备注")
        self.model.setEditStrategy(QSqlTableModel.OnFieldChange)

        # -----------------  tableView  --------------------------#
        self.tableView.setModel(self.model)
        self.tableView.horizontalHeader().setStretchLastSection(True)

        # -----------------  query  --------------------------#
        self.query = QSqlQuery()

    def contextMenuEvent(self, event):
        cmenu = QMenu()
        quitAct = cmenu.addAction("退出")
        action = cmenu.exec_(self.mapToGlobal(event.pos()))
        if action == quitAct:
            qApp.quit()

    def add(self):
        self.query.exec(
            "insert into `warehouse` VALUES (NULL ,'example.com','example','example','example')"
        )
        self.reselect()
        rows = self.model.rowCount()
        self.tableView.selectRow(rows)

    def delete(self):
        row = self.tableView.currentIndex().row()
        site_id = self.model.data(self.model.index(row, 0))
        sql = "delete from `warehouse` where id =" + str(site_id)
        self.query.exec(sql)
        self.reselect()

    def reselect(self):
        if self.model.data(self.model.index(self.model.rowCount(), 0)) != "":
            self.model.select()