有客自远方来52 2024-04-22 21:29 采纳率: 15.3%
浏览 2
已结题

如何设置系统的警告功能?(语言-python|开发工具-pycharm)

我想实现在初始化表单时,首先查询图书库存量,如果有图片库存量小于5本的会弹出消息框提示库存不足,并且该图书名也会变红,在逻辑功能代码模块该如何实现

def initTable(self):
    """
    根据条件初始化表格
    :return:
    """
    bookName = self.s_bookNameInput.text()
    authorName = self.s_authorInput.text()
    TID = self.s_ComboBox.currentData()
    s_book = Book(bookName, authorName, TID)
    result = bookDao.list(s_book)
    row = 0
    if result:
        row = len(result)
    self.bookListTable.setColumnCount(9)
    self.bookListTable.setRowCount(row)
    self.bookListTable.verticalHeader().setVisible(False)  # 隐藏垂直标题 序号
    self.bookListTable.setEditTriggers(QAbstractItemView.EditTrigger.NoEditTriggers)  # 禁止编辑单元格
    self.bookListTable.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding)
    self.bookListTable.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarPolicy.ScrollBarAlwaysOn)
    self.bookListTable.setHorizontalHeaderLabels(
        ['图书编号', '图书名称', '图书作者', '作者年龄', '作者性别', '图书价格', '库存量', '图书类别', '图书简介'])
    self.bookListTable.horizontalHeader().setSectionResizeMode(QHeaderView.ResizeMode.Stretch)  # 列头自适应
    self.bookListTable.setSelectionBehavior(
        QAbstractItemView.SelectionBehavior.SelectRows)  # 设置选择行为,以行为单位

    for i in range(row):
        for j in range(9):
            data = QTableWidgetItem(str(result[i][j]))
            # 设置单元格内容居中对齐
            data.setTextAlignment(Qt.AlignmentFlag.AlignCenter)
            self.bookListTable.setItem(i, j, data)
   

数据库模块

 def check(book: Book) -> int:
    """
    检查所有图书的库存量,返回库存量小于阈值的图书数量
    :param book: 图书实例
    :return: 库存量小于阈值的图书数量
    """
    con = None
    try:
        con = dbUtil.getCon()
        cursor = con.cursor()
        # 查找库存量小于阈值的图书
        sql = f"SELECT ID,stock FROM t_book WHERE stock<5"
        cursor.execute(sql)
        con.commit()
        return cursor.rowcount
    except Exception as e:
        print(f"查找数据时发生错误: {e}")
        if con is not None:
            con.rollback()
        return 0
    finally:
        dbUtil.closeCon(con)


  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-04-22 21:29
    关注

    引自免费微信小程序:皆我百晓生

    要在PyQt中实现这个功能,你需要在initTable方法中调用check函数来检查库存量,并根据结果更新表格中的相应行。这里是一个修改后的initTable方法示例,包括了库存不足的图书名称变红以及弹出警告消息的功能:

    import sys
    from PyQt5.QtWidgets import QMessageBox
    # ... 其他导入 ...
    
    class YourClass(QWidget):  # 假设这是包含initTable的类
        def __init__(self):
            super().__init__()
            # 初始化其他组件...
    
        def initTable(self):
            """
            根据条件初始化表格
            :return:
            """
            bookName = self.s_bookNameInput.text()
            authorName = self.s_authorInput.text()
            TID = self.s_ComboBox.currentData()
            s_book = Book(bookName, authorName, TID)
            result = bookDao.list(s_book)
            row = 0
            if result:
                row = len(result)
    
            self.bookListTable.setColumnCount(9)
            self.bookListTable.setRowCount(row)
            self.bookListTable.verticalHeader().setVisible(False)  # 隐藏垂直标题 序号
            self.bookListTable.setEditTriggers(QAbstractItemView.EditTrigger.NoEditTriggers)  # 禁止编辑单元格
            self.bookListTable.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding)
            self.bookListTable.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarPolicy.ScrollBarAlwaysOn)
            self.bookListTable.setHorizontalHeaderLabels(
                ['图书编号', '图书名称', '图书作者', '作者年龄', '作者性别', '图书价格', '库存量', '图书类别', '图书简介'])
            self.bookListTable.horizontalHeader().setSectionResizeMode(QHeaderView.ResizeMode.Stretch)  # 列头自适应
            self.bookListTable.setSelectionBehavior(
                QAbstractItemView.SelectionBehavior.SelectRows)  # 设置选择行为,以行为单位
    
            # 新增部分:检查库存并处理库存不足的情况
            warning_count = 0
            for i in range(row):
                for j in range(9):
                    data = QTableWidgetItem(str(result[i][j]))
    
                    # 设置单元格内容居中对齐
                    data.setTextAlignment(Qt.AlignmentFlag.AlignCenter)
    
                    # 如果是库存列(索引为6),检查库存量并更新颜色
                    if j == 6:
                        stock = int(data.text())
                        if stock < 5:
                            # 将库存不足的图书名称变为红色
                            item = self.bookListTable.item(i, 1)
                            if item:
                                item.setTextColor(QtGui.QColor("red"))
                            # 统计警告数量
                            warning_count += 1
    
                    self.bookListTable.setItem(i, j, data)
    
            # 如果有库存不足的图书,显示警告信息
            if warning_count > 0:
                message = f"发现{warning_count}本库存不足的图书,请注意!"
                QMessageBox.warning(self, "库存警告", message)
    
        # ... 其他方法...
    

    这段代码首先遍历表格中的每一行和每一列,当检测到库存列时,它会检查库存量是否小于5。如果是,则将对应的图书名称改为红色,并增加警告计数器。最后,如果警告计数器大于0,就会弹出一个警告消息框。

    确保已经包含了必要的PyQt5库引用,并且在适当的位置定义了YourClassQTableWidgetItemQtQtGuiQMessageBox等类。同时,请确保bookDao.list(s_book)返回的是一个包含库存量(通常是第六个元素)的结果列表。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 4月23日
  • 创建了问题 4月22日