其他分享
首页 > 其他分享> > QMessageBox.question报错:TypeError: question(QWidget, str, str, buttons: Union[QMessageBox.StandardBut

QMessageBox.question报错:TypeError: question(QWidget, str, str, buttons: Union[QMessageBox.StandardBut

作者:互联网

报错:

TypeError: question(QWidget, str, str, buttons: Union[QMessageBox.StandardButtons, QMessageBox.StandardButton] = QMessageBox.StandardButtons(QMessageBox.Yes|QMessageBox.No), defaultButton: QMessageBox.StandardButton = QMessageBox.NoButton): argument 1 has unexpected type 'Ui_MainWindow'

在这里插入图片描述
报错的提示是QMessage.question()函数的第一个参数的类型不对。
代码中也警告:Unexpected type(s):(Ui_MainWindow, str, str, Any, Any)
在这里插入图片描述

具体代码

在这里插入图片描述
在这里插入图片描述

我直接将自己定义的 tipDialog()函数放在了上面定义的Ui_MainWindow()类中,第一个参数使用了self,这里的self 应该指代的Ui_MainWindow()类,所以出现了类型不符合的错误。
因为这个类的代码是用QtDesigner自动生成的,就不想改类的代码了。但可以从QMessageBox.question函数下手解决问题。

那我们就开看看QMessageBox.question函数的参数规则

QMessageBox.question

使用QMessageBox.question可以直接弹出带选择按钮的对话框,然后可以通过判定来获取用户的选择结果。

基本格式QMessage.question(parent, title, content, button)
parent: 表示对话框所归属的程序窗口。填写父类(通常为self);若不属于任何程序窗口,为None。
title: 标题。
content: 内容。
button: 对话框按钮。

result = QMessageBox.question(self, '提示', '文件保存路径不存在,是否创建?', QMessageBox.Yes | QMessageBox.No,QMessageBox.No)

QMessageBox.Yes | QMessageBox.No 表示要显示什么样的按钮,最后一个参数QMessageBox.No表示默认选中哪个按钮。

报错解决方法:

QMessageBox.question的第一个参数设为None,就不会再报错了。

    def tipDialog(self,path):
        result = QMessageBox.question(None, '提示', '文件保存路径不存在,是否创建?', QMessageBox.Yes | QMessageBox.No,QMessageBox.No)  # 默认关闭界面选择No
        if result == QMessageBox.Yes:
            os.makedirs(path)
            return True
        else:
            return False

在这里插入图片描述

测试程序

为了验证,专门编了一段测试小代码,可以正常弹出提问对话框。

from PyQt5.QtWidgets import QMessageBox, QApplication
import os
import sys

class test():
    def __init__(self,path):
        self.path = path

    def tipDialog(self):
        result = QMessageBox.question(None, '提示', '文件保存路径不存在,是否创建?', QMessageBox.Yes | QMessageBox.No,QMessageBox.No)  # 默认关闭界面选择No
        if result == QMessageBox.Yes:
            os.makedirs(self.path)
            return True
        else:
            return False

if __name__ == '__main__':
    # pass
    app = QApplication(sys.argv)
    demo = test('123')
    demo.tipDialog()
    sys.exit(app.exec_())

关于其他类型的对话框(消息对话框、提问对话框、警告对话框、严重错误对话框、关于对话框)可以学习下面这篇文章:
[ PyQt入门教程 ] PyQt5基本控件使用:消息弹出、用户输入、文件/目录选择对话框

参考文章

[PyQt5]{13} —— QMessageBox对话框

PyQt5 QMessageBox.question一种偷懒的快速对话框

标签:str,No,self,对话框,question,QMessageBox,Yes
来源: https://blog.csdn.net/quxuexi/article/details/122492704