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

如何时提示框在界面框之上?(语言-python|开发工具-pycharm)

我想实现当库存不足时,会弹出消息框,但现在消息框弹出后才显示数据界面,怎么可以先显示数据界面,在数据界面之上弹出消息框?,并且怎么时库存不足对应的那本书变红色

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)
    # 查询库存量小于阈值的图书数量
    low_stock_count = dbModule.check(s_book)
    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)
            # 判断库存是否低于阈值,以及将库存量小于阈值的行变红
            if j == 6 and int(result[i][j]) < 5:
                data.setForeground(QtGui.QColor(255, 0, 0))
                QMessageBox.warning(self, '库存不足', '图书库存不足,请及时补货!')
            self.bookListTable.setItem(i, j, data)


  • 写回答

2条回答 默认 最新

  • 码农阿豪@新空间代码工作室 Java领域优质创作者 2024-04-22 22:16
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    问题分析: 根据代码,当库存不足时,会弹出消息框。但现在消息框弹出后才显示数据界面,需要先显示数据界面,在数据界面之上弹出消息框。 解决方案: 利用Qt的模态弹出窗口和QTimer的定时器,在数据界面之上弹出消息框。在弹出消息框前,先将数据界面设置为不可操作状态,弹出消息框后,定时器设定若干秒后关闭消息框,同时将数据界面重新设置为可操作状态。 代码如下:
    import sys
    from PyQt5.QtCore import QTimer
    from PyQt5.QtWidgets import QApplication, QMessageBox, QWidget
    class Example( QWidget ):
        def __init__(self):
            super().__init__()
            # 初始化界面
            self.initUI()
        def initUI(self):
            # ... 略去初始化UI的代码 ...
        def checkbook(self):
            # ... 检查图书库存并显示 ...
            # 判断库存是否低于阈值,以及将库存量小于阈值的行变红
            # 添加提示框
            for i in range(row):
                for j in range(9):
                    data = QTableWidgetItem(str(result[i][j]))
                    # 设置单元格内容居中对齐
                    data.setTextAlignment(Qt.AlignCenter)
                    # 判断库存是否低于阈值,以及将库存量小于阈值的行变红
                    if j == 6 and int(result[i][j]) < 5:
                        data.setForeground(QtGui.QColor(255, 0, 0))
                        # 创建模态弹出窗口
                        w = QWidget(self, Qt.Dialog | Qt.WindowTitleHint | Qt.WindowCloseButtonHint)
                        msgBox = QMessageBox.warning(w, '库存不足', '图书库存不足,请及时补货!')
                        # 使用定时器关闭模态弹出窗口
                        QTimer.singleShot(3000, w.close)
                        # 禁止操作数据界面
                        self.bookListTable.setDisabled(True)
                        msgBox.exec()
                        # 重新允许操作数据界面
                        self.bookListTable.setDisabled(False)
                    self.bookListTable.setItem(i, j, data)
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        ex = Example()
        sys.exit(app.exec_())
    注意事项:
    • 上述代码只是修改原有代码的checkbook函数,在该函数中添加了模态弹出窗口和定时器。
    • Qt的模态弹出窗口会阻塞程序,需要使用定时器来实现弹出窗口后自动关闭。
    • 代码仅供参考,需要根据实际情况做适当的调整。
    评论

报告相同问题?

问题事件

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

悬赏问题

  • ¥15 Xsheii7我安装这个文件的时候跳出来另一个文件已锁定文件的无一部分进程无法访问。这个该怎么解决
  • ¥15 unity terrain打包后地形错位,跟建筑不在同一个位置,怎么办
  • ¥15 FileNotFoundError 解决方案
  • ¥15 uniapp实现如下图的图表功能
  • ¥15 u-subsection如何修改相邻两个节点样式
  • ¥30 vs2010开发 WFP(windows filtering platform)
  • ¥15 服务端控制goose报文控制块的发布问题
  • ¥15 学习指导与未来导向啊
  • ¥15 求多普勒频移瞬时表达式
  • ¥15 如果要做一个老年人平板有哪些需求