You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PyQt MessageBox中使用变量及解决点击No崩溃问题

解决QMessageBox插入变量及点击No崩溃的问题

看起来你遇到了两个核心问题:没法在消息框文本里插入变量,以及点击No按钮时程序崩溃。咱们一步步来搞定:

首先,崩溃的关键原因

你尝试添加的odp.setDetailText(par_1, par_2)是错误的——QMessageBox.question()返回的不是消息框对象,而是一个代表用户点击按钮的整数枚举值(比如QMessageBox.Yes对应16384,QMessageBox.No对应65536)。整数类型根本没有setDetailText方法,所以执行这行代码时会直接抛出AttributeError,导致程序崩溃。这就是不管点击哪个按钮都会崩的原因。

方案1:直接在主消息文本中插入变量

如果不需要额外的详情文本,最简单的方式是用字符串格式化把变量嵌入到消息内容里,比如用Python的f-string:

def message(self, par_1, par_2):
    # 构造包含作者姓名的消息文本
    msg_content = f"No entry for {par_1} {par_2}. Would you like to add it to DB?"
    odp = QMessageBox.question(
        self,
        'Information',
        msg_content,
        QMessageBox.Yes | QMessageBox.No,
        QMessageBox.No
    )
    return odp == QMessageBox.Yes

调用方式还是你原来的self.message(autor_firstname, autor_lastname),这样消息框里就会显示具体的作者姓名了。

方案2:使用详情文本展示变量

如果你确实想用setDetailText来展示额外信息(比如把作者姓名放在详情里),需要手动创建QMessageBox实例,而不是用静态的question方法:

def message(self, par_1, par_2):
    # 创建消息框实例
    msg_box = QMessageBox(self)
    msg_box.setWindowTitle('Information')
    msg_box.setText("No entry found. Would you like to add it to DB?")
    # 设置详情文本,插入变量
    msg_box.setDetailedText(f"Author: {par_1} {par_2}")
    msg_box.setStandardButtons(QMessageBox.Yes | QMessageBox.No)
    msg_box.setDefaultButton(QMessageBox.No)
    
    # 显示对话框并获取用户选择
    user_choice = msg_box.exec()
    return user_choice == QMessageBox.Yes

这种方式下,消息框会有一个“显示详情”的按钮,点击后就能看到包含变量的内容,同时也不会有崩溃问题。

最后注意

一定要删掉那行错误的odp.setDetailText(par_1, par_2)代码,不管用哪个方案,这行都会导致程序报错。修正后点击Yes/No都能正常返回对应布尔值,程序也不会崩溃了。

内容的提问来源于stack exchange,提问作者HyperQBE

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:58:10