示例#1
0
class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        self.table = QTableView()

        self.model = QSqlTableModel(db=db)

        self.table.setModel(self.model)

        # tag::titles[]
        self.model.setTable("Track")
        column_titles = {
            "Name": "Name",
            "AlbumId": "Album (ID)",
            "MediaTypeId": "Media Type (ID)",
            "GenreId": "Genre (ID)",
            "Composer": "Composer",
        }
        for n, t in column_titles.items():
            idx = self.model.fieldIndex(n)
            self.model.setHeaderData(idx, Qt.Horizontal, t)

        self.model.select()
        # end::titles[]

        self.model.select()

        self.setMinimumSize(QSize(1024, 600))
        self.setCentralWidget(self.table)
示例#2
0
文件: helpers.py 项目: uMag/ledger
def UseSqlQuery(db, query, columns):
    model = QSqlTableModel(db=db)
    model.setQuery(query)
    for column in columns:
        if column[hcol_idx.DISPLAY_NAME]:
            model.setHeaderData(model.fieldIndex(column[hcol_idx.DB_NAME]),
                                Qt.Horizontal, column[hcol_idx.DISPLAY_NAME])
    return model
示例#3
0
class SQLite(QSqlDatabase):
    """
    Класс для инициализации и открытия базы данных каталога, полученный из Slot'а (openFile)
    """
    def __init__(self, path=None):
        """
        Инициализация экземпляра класса
        :param path: путь до каталога, полученный изиз Slot'а (openFile)
        """
        super().__init__()
        self.path = path
        self.width = 0
        self.heigh = 0
        self.db = QSqlDatabase.addDatabase('QSQLITE')
        self.db.setDatabaseName(self.path)
        self.db.open()
        self.window = QWidget()
        self.window.setWindowTitle("Каталог книг")
        self.conn = sqlite3.connect(self.path)
        cursor = self.conn.cursor()
        sql = f'select * from sqlite_master where type = "table"'  # получение имени таблицы(первая в списке), к которой будет
        # осуществлено подключение
        cursor.execute(sql)
        self.search_result = cursor.fetchall()[0][1]
        self.model = QSqlTableModel(parent=self.window, db=self.db)
        self.model.setTable(self.search_result)
        self.db_record = QSqlRecord(self.db.record(self.search_result))
        self.tableView = QTableView()

    def on(self):
        """
        Метод для подключения и отображения подключенного каталога
        :return: виджет self.window
        """
        self.model.setEditStrategy(QSqlTableModel.OnManualSubmit)
        self.model.select()
        self.model.setHeaderData(-1, Qt.Horizontal,
                                 self.db_record.fieldName(0))
        vbox = QVBoxLayout()
        self.tableView.setModel(self.model)
        self.tableView.resizeColumnsToContents()
        self.tableView.resizeRowsToContents()
        for i in range(self.model.columnCount() + 2):
            self.width += self.tableView.columnWidth(i)
        for j in range(self.model.rowCount() + 1):
            self.heigh += self.tableView.rowHeight(j)
        self.tableView.resize(self.width + 50, self.heigh + 50)
        vbox.addWidget(self.tableView)
        self.window.setLayout(vbox)
        self.window.resize(self.tableView.width() + 30,
                           self.tableView.height() + 120)
        return self.window
示例#4
0
    def create_model() -> QSqlTableModel:
        """Create and return the model to use with the playlist table view."""
        model = QSqlTableModel()
        model.setTable("playlist")
        model.setEditStrategy(QSqlTableModel.OnManualSubmit)

        model.setHeaderData(1, Qt.Horizontal, "Title", Qt.DisplayRole)
        model.setHeaderData(2, Qt.Horizontal, "Artist", Qt.DisplayRole)
        model.setHeaderData(3, Qt.Horizontal, "Album", Qt.DisplayRole)
        model.setHeaderData(4, Qt.Horizontal, "Genre", Qt.DisplayRole)
        model.setHeaderData(5, Qt.Horizontal, "Date", Qt.DisplayRole)

        # Default is a descending sort, which leads to an inconsistency given media is appended
        model.setSort(0, Qt.AscendingOrder)
        model.select()  # Force-update the view

        return model
示例#5
0
class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        self.table = QTableView()

        self.model = QSqlTableModel(db=db)

        self.table.setModel(self.model)

        # tag::titles[]
        self.model.setTable("Track")
        self.model.setHeaderData(1, Qt.Horizontal, "Name")
        self.model.setHeaderData(2, Qt.Horizontal, "Album (ID)")
        self.model.setHeaderData(3, Qt.Horizontal, "Media Type (ID)")
        self.model.setHeaderData(4, Qt.Horizontal, "Genre (ID)")
        self.model.setHeaderData(5, Qt.Horizontal, "Composer")
        self.model.select()
        # end::titles[]

        self.model.select()

        self.setMinimumSize(QSize(1024, 600))
        self.setCentralWidget(self.table)
示例#6
0
文件: interface.py 项目: setrsw/Test
class Stats(Ui_armus):
    def __init__(self):
        # 从文件中加载UI定义
        # qfile=QFile(r'E:\Pycharm\armus1\ui\armus1.ui')
        # qfile.open(QFile.ReadOnly)
        # # qfile_stats.close()
        # # 从 UI 定义中动态 创建一个相应的窗口对象
        # # 注意:里面的控件对象也成为窗口对象的属性了
        # # 比如 self.ui.button , self.ui.textEdit
        # # loader=QUiLoader()
        # self.ui=QUiLoader().load(qfile)
        # self.ui.show()
        super(Stats,self).__init__()
        # self.ui=Ui_armus()

        # self.tableView.setModel()
        db=QSqlDatabase.addDatabase('QSQLITE')
        db.setDatabaseName('universitys.db')
        self.spider=Data_Spider()#爬虫连接
        self.session=DBSession()#数据库连接
        self.setupUi(self)
        # self.query=QSqlQuery(db)
        self.init_connect_db()
        # self.model = QStandardItemModel()  # 存储任意结构数据
        # self.model=QSqlQueryModel()
        self.comboBox.activated[str].connect(self.orderinfo)
        self.pushButton.clicked.connect(self.add_college)
        self.pushButton_2.clicked.connect(self.update_college)
        self.pushButton_4.clicked.connect(self.spiders_info)
        self.pushButton_5.clicked.connect(self.spider_info)
        # self.pushButton_3.clicked.connect(self.help_info)
        self.comboBox_2.activated[str].connect(self.link_collegeurl)

    #初始化连接数据库
    def init_connect_db(self):
        self.model = QSqlTableModel()
        self.tableView.setModel(self.model)
        self.model.setTable('notifications')
        self.model.setHeaderData(0, Qt.Horizontal, "全文链接")
        self.model.setHeaderData(1, Qt.Horizontal, "讲座标题")
        self.model.setHeaderData(2, Qt.Horizontal, "报告大学")
        self.model.setHeaderData(3, Qt.Horizontal, "报告人")
        self.model.setHeaderData(4, Qt.Horizontal, "报告地点")
        self.model.setHeaderData(5, Qt.Horizontal, "举办时间")
        self.model.setHeaderData(6, Qt.Horizontal, "发布时间")
        # self.model.setFilter('college="华南理工大学软件学院"')
        self.model.select()

    #排序筛选信息
    def orderinfo(self,text):
        if text=="按举办时间排序":
            # print('按举办时间排序')
            self.model.setFilter('title like "%%密码%" or title like "%%安全%" or title like "%security%"')
            self.model.setSort(5,Qt.DescendingOrder)#按举办时间降序
            self.model.select()

        elif text=='按发布时间排序':
            # print('按发布时间排序')
            self.model.setFilter('title like "%%密码%" or title like "%%安全%" or title like "%security%"')
            self.model.setSort(6, Qt.DescendingOrder)#按发布时间降序
            self.model.select()
        else:
            self.model.setFilter('url like "%%"')
            self.model.select()

            # QMessageBox.critical(NULL, "critical", "Content", QMessageBox.Yes, QMessageBox.Yes) #带按键


    def add_college(self):  #添加学校网页
        url=self.lineEdit_7.text()
        college=self.lineEdit.text()
        nextpage=self.lineEdit_2.text()
        url_xpath=self.lineEdit_3.text()
        text_xpath=self.lineEdit_4.text()
        notify_time=self.lineEdit_5.text()

        self.spider.set_college_url(url)
        self.spider.set_college(college)
        self.spider.set_next_xpath(nextpage)
        self.spider.set_url_xpath(url_xpath)
        self.spider.set_text_xpath(text_xpath)
        self.spider.set_notify_time_xpath(notify_time)
        self.spider.set_title_word()
        self.spider.insert_seed(self.session)

    def update_college(self):
        list_college=self.session.query(Seed).all()
        num=self.comboBox_2.count()
        colleges=[]
        for i in range(num):
            colleges.append(self.comboBox_2.itemText(i))
        for row in list_college:
            if row.college not in colleges:
                self.comboBox_2.addItem(row.college)

    def link_collegeurl(self,text):
        college=self.session.query(Seed).filter(Seed.college==text).first()
        if college!=None:
            self.lineEdit_6.setText(college.start_url)
            self.model.setFilter('college="%s"'%(text))
            self.model.select()
        else:
            self.lineEdit_6.setText('')
            self.model.select()
    def spiders_info(self):
        self.spider.universities_spider()
        MESSAGE = "更新/爬取学术信息完成"
        msgBox = QMessageBox(QMessageBox.Question,
                             "提示", MESSAGE,
                             QMessageBox.NoButton, self)
        msgBox.addButton("确定", QMessageBox.AcceptRole)
        msgBox.exec_()

    def spider_info(self):
        text=self.comboBox_2.currentText()
        college = self.session.query(Seed).filter(Seed.college == text).first()
        self.spider.university_spider(college)
        MESSAGE = "更新/爬取学术信息完成"
        msgBox = QMessageBox(QMessageBox.Question,
                             "提示", MESSAGE,
                             QMessageBox.NoButton, self)
        msgBox.addButton("确定", QMessageBox.AcceptRole)
        msgBox.exec_()
示例#7
0
class ManageSettings(QMainWindow):
    def __init__(self, parent):
        super(ManageSettings, self).__init__(parent)
        self.setWindowTitle("Paraméterek kezelése")
        widget = QWidget()
        main_layout = QHBoxLayout()
        widget.setLayout(main_layout)

        self.setCentralWidget(widget)
        self.table_view = QTableView()
        main_layout.addWidget(self.table_view)

        self.model = QSqlTableModel(db=db)
        self.model.setTable("settings")
        self.model.select()
        self.model.setEditStrategy(QSqlTableModel.OnManualSubmit)
        self.model.setHeaderData(1, Qt.Horizontal, "Paraméter")
        self.model.setHeaderData(2, Qt.Horizontal, "Érték")

        self.table_view.setModel(self.model)
        self.table_view.setSortingEnabled(True)
        self.table_view.hideColumn(0)
        self.table_view.resizeColumnsToContents()

        self.model.dataChanged.connect(self.valtozott)
        gomb_layout = QVBoxLayout()
        main_layout.addLayout(gomb_layout)

        self.apply_button = QPushButton("Módosítások alkalmazása")
        self.cancel_button = QPushButton("Módosítások elvetése")

        gomb_layout.addWidget(self.apply_button)
        gomb_layout.addWidget(self.cancel_button)

        self.space = QSpacerItem(0, 0, QSizePolicy.Minimum,
                                 QSizePolicy.Expanding)
        gomb_layout.addItem(self.space)

        self.setFixedSize(400, 600)
        tb = self.addToolBar("File")

        exit = QAction(QIcon("images/door--arrow.png"), "Kilépés", self)
        tb.addAction(exit)

        tb.actionTriggered[QAction].connect(self.toolbarpressed)

        self.apply_button.clicked.connect(self.valtozas_mentese)
        self.cancel_button.clicked.connect(self.valtozas_elvetese)

    def toolbarpressed(self, a):
        if a.text() == "Kilépés":
            self.close()

    def valtozott(self):
        self.apply_button.setStyleSheet('background-color: green;')
        self.cancel_button.setStyleSheet('background-color: red;')

    def valtozas_mentese(self):
        self.model.submitAll()
        self.apply_button.setStyleSheet('')
        self.cancel_button.setStyleSheet('')

    def valtozas_elvetese(self):
        self.model.revertAll()
        self.apply_button.setStyleSheet('')
        self.cancel_button.setStyleSheet('')
示例#8
0
class ManageMembers(QMainWindow):
    def __init__(self, parent):
        super(ManageMembers, self).__init__(parent)
        self.setWindowTitle("Tagok kezelése")
        widget = QWidget()
        main_layout = QHBoxLayout()
        widget.setLayout(main_layout)

        self.setCentralWidget(widget)
        self.table_view = QTableView()
        main_layout.addWidget(self.table_view)

        self.model = QSqlTableModel(db=db)
        self.model.setTable("members")
        self.model.select()
        self.model.setEditStrategy(QSqlTableModel.OnManualSubmit)
        self.model.setHeaderData(1, Qt.Horizontal, "Vezetéknév")
        self.model.setHeaderData(2, Qt.Horizontal, "Utónév")
        self.model.setHeaderData(3, Qt.Horizontal, "Született")
        self.model.setHeaderData(4, Qt.Horizontal, "Ir.szám")
        self.model.setHeaderData(5, Qt.Horizontal, "Helység")
        self.model.setHeaderData(6, Qt.Horizontal, "Cím")
        self.model.setHeaderData(7, Qt.Horizontal, "Telefon")
        self.model.setHeaderData(8, Qt.Horizontal, "E-mail")
        self.model.setHeaderData(9, Qt.Horizontal, "Tagság kezdete")
        self.model.setHeaderData(10, Qt.Horizontal, "Aktív")
        # self.model.setFilter('vezeteknev Like "Czi%"')

        self.table_view.setModel(self.model)
        self.table_view.hideColumn(0)
        self.table_view.resizeColumnsToContents()
        # Ha ez engedélyezve, akkor a model-nél beállított sort nem működik, ez felülírja
        # Enélkül működik a model-es beállítás
        self.table_view.setSortingEnabled(True)
        # Ha engedélyezve van a fejléc szerinti rendezés, akkor UTÁNA meg lehet adni az alap sorrendet
        self.table_view.sortByColumn(1, Qt.AscendingOrder)

        self.model.dataChanged.connect(self.valtozott)
        gomb_layout = QVBoxLayout()
        main_layout.addLayout(gomb_layout)

        self.delete_button = QPushButton("&Tag törlése")
        self.add_button = QPushButton("&Új tag")
        self.apply_button = QPushButton("Módosítások alkalmazása")
        self.cancel_button = QPushButton("Módosítások elvetése")

        gomb_layout.addWidget(self.delete_button)
        gomb_layout.addWidget(self.add_button)
        gomb_layout.addWidget(self.apply_button)
        gomb_layout.addWidget(self.cancel_button)

        self.space = QSpacerItem(0, 0, QSizePolicy.Minimum,
                                 QSizePolicy.Expanding)
        gomb_layout.addItem(self.space)

        self.setFixedSize(1000, 800)
        tb = self.addToolBar("File")

        exit = QAction(QIcon("images/door--arrow.png"), "Kilépés", self)
        tb.addAction(exit)

        excel = QAction(QIcon("images/excel.png"), "Excel", self)
        tb.addAction(excel)

        tb.actionTriggered[QAction].connect(self.toolbarpressed)

        self.delete_button.clicked.connect(self.tag_torles)
        self.add_button.clicked.connect(self.tag_hozzadas)
        self.apply_button.clicked.connect(self.valtozas_mentese)
        self.cancel_button.clicked.connect(self.valtozas_elvetese)

    def tag_hozzadas(self):
        self.form_window = UjtagFormDialog()
        self.form_window.setWindowTitle("Új tag felvétele")
        if self.form_window.exec_():
            record = self.model.record()
            record.remove(record.indexOf('id'))

            for i in range(len(self.form_window.mezo_ertekek)):
                record.setValue(i, self.form_window.mezo_ertekek[i].text())
                # print(i, record.value(i))
            if self.model.insertRecord(-1, record):
                self.model.submitAll()
                self.apply_button.setStyleSheet('')
                self.cancel_button.setStyleSheet('')
            else:
                db.rollback()

    def tag_torles(self):
        if len(self.table_view.selectedIndexes()) > 0:
            self.model.removeRow(self.table_view.selectedIndexes()[0].row())
            self.model.submitAll()
        else:
            reply = QMessageBox.question(None, 'Hiba!',
                                         'Törlés előtt jelöljön ki egy sort!',
                                         QMessageBox.Ok)

    def toolbarpressed(self, a):
        if a.text() == "Kilépés":
            self.close()
        if a.text() == "Excel":
            data = []
            for i in range(self.model.rowCount()):
                sor = []
                for j in range(self.model.columnCount()):
                    if isinstance(self.model.record(i).value(j), QDate):
                        sor.append(
                            self.model.record(i).value(j).toString(
                                "yyyy-MM-dd"))
                    else:
                        sor.append(self.model.record(i).value(j))
                data.append(sor)
            p.save_as(array=data, dest_file_name="tagok.xlsx")

    def valtozott(self):
        self.apply_button.setStyleSheet('background-color: green;')
        self.cancel_button.setStyleSheet('background-color: red;')

    def valtozas_mentese(self):
        self.model.submitAll()
        self.apply_button.setStyleSheet('')
        self.cancel_button.setStyleSheet('')

    def valtozas_elvetese(self):
        self.model.revertAll()
        self.apply_button.setStyleSheet('')
        self.cancel_button.setStyleSheet('')