在setModelData中显示QMessageBox时出错

时间:2014-10-24 21:48:42

标签: python pyqt

我试图通过显示QMessageBox来输入无效数据时提醒用户。问题是它给了我这个错误:TypeError:arguments与任何重载调用都不匹配。我写的代码是:

def setModelData(self, editor, model, index):
    if index.column() == 1:
        data = editor.text()
        query = QSqlQuery()
        query.exec_("select * from gaceta where nombre='%s'" % (data,))
        if query.next():
            QMessageBox.warning(self, 'Error', 'Ya hay una Gaceta con ese nombre')
        else:
            model.setData(index, QVariant(data))    

我在数据库中查找具有相同名称的元素,如果找到任何我没有设置数据,而是通知用户验证错误。如果有更好的方法,请告诉,thnks

1 个答案:

答案 0 :(得分:1)

看起来你是在QItemDelegate的子类中调用它。 QItemDelegate子类QAbstractItemDelegate,它们又是QObject的子类。

QMessageBox.warning的第一个参数必须是QWidget的衍生物,正如您从上面的解释中看到的那样,QItemDelegate不是。QMessageBox.warning。因此,您收到的错误是您传递给self的参数类型错误。

因此,您需要一个实际的QWidget,而不是传递editor。您可以尝试使用QItemDelegate变量,因为它包含QWidget衍生物(您的文本框)。我不明白为什么那不起作用。但是,如果您遇到该解决方案的问题,则可能需要将另一个窗口小部件的引用传递到您可以存储和稍后引用的{{1}}构造函数中。