ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2022-01-14 15:01:53  阅读:278  来源: 互联网

标签:str No self 对话框 question QMessageBox Yes


报错:

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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有