有客自远方来52 2024-04-23 11:25 采纳率: 15.3%
浏览 12
已结题

为什么qt中没有QtGui?

以下是我的代码,我是用的是pyqt6,我想设置某一行的数据变红,但为什么会显示无法定义

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)
            # 判断库存是否低于阈值,以及将库存量小于阈值的行变红
            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)


name 'QtGui' is not defined

  • 写回答

4条回答 默认 最新

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

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

    在PyQt6中,QtGui模块已经被拆分到不同的模块中。如果你需要使用颜色相关的功能,你应该导入QtWidgets中的QColor类。这里是修改后的代码,去掉了对QtGui的引用,并且优化了警告消息框的创建。

    from PyQt6.QtCore import Qt
    from PyQt6.QtWidgets import QApplication, QColor, QMessageBox, QTableWidgetItem
    
    # ... (其他导入和类定义)
    
    def initTable(self):
        """
        根据条件初始化表格
        :return:
        """
        # ... (其他代码)
    
        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)
                
                # 判断库存是否低于阈值,以及将库存量小于阈值的行变红
                if j == 6 and int(result[i][j]) < 5:
                    color = QColor(255, 0, 0)
                    data.setForeground(color)
                    
                    # 创建警告消息框
                    message_box = QMessageBox(QMessageBox.Warning, "库存不足", "图书库存不足,请及时补货!")
                    message_box.exec()
    
                    # 不需要再次设置item,因为它已经设置了前景色
                    # self.bookListTable.setItem(i, j, data)
    

    这段代码首先从QtWidgets导入了QColor,然后在判断库存不足时,创建了一个新的QColor对象并将其设置为单元格的前景色。接下来,它创建了一个警告消息框,并立即执行它,这样用户可以看到提示。最后,由于我们已经在之前设置了单元格的颜色,所以不需要再次调用setItem方法。这样应该可以解决你的问题。

    评论 编辑记录

报告相同问题?

问题事件

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