ython: PySide(PyQt)QMessageBox按钮显示中文

本文介绍如何在PySide(PyQt)中使用QMessageBox显示中文按钮和消息,通过设置编码和使用tr函数实现本地化,同时提供多种按钮角色和事件处理方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ython: PySide(PyQt)QMessageBox按钮显示中文

ython: PySide(PyQt)QMessageBox按钮显示中文

习惯了Delphi、c#调用系统MessageBox本地化显示,待用PySide调用时,Qt原生提示对话框,默认以英文显示。

如何本地化呢?

参考些资料,加以摸索,实现所需效果。并可根据此思路,设计自己所需要的MessageBox封装。
复制代码

QTextCodec.setCodecForTr(QTextCodec.codecForName("UTF-8"))
box = QMessageBox(QMessageBox.Question, self.tr("提示"), self.tr("您确定要退出吗?"), QMessageBox.NoButton, self)
yr_btn = box.addButton(self.tr("是"), QMessageBox.YesRole)
box.addButton(self.tr("否"), QMessageBox.NoRole)
box.exec_()
if box.clickedButton() == yr_btn:
    print 'Bye bye...'
    return
else:
    print '继续...'

复制代码

效果如下图示:

直接以.exec_()判断,[是]按钮返回0,尚不知如何与QMesageBox.YesRole对应。但若使用QMessageBox.AcceptRole与QMessageBox.RejectRole则可以。

下面代码,摘自PySide自带例子:
复制代码

MESSAGE = "<p>Message boxes have a caption, a text, and up to three " \
          "buttons, each with standard or custom texts.</p>" \
          "<p>Click a button to close the message box. Pressing the Esc " \
          "button will activate the detected escape button (if any).</p>"

msgBox = QMessageBox(QMessageBox.Question,
        "QMessageBox.warning()", MESSAGE,
        QMessageBox.NoButton, self)
msgBox.addButton("Save &Again", QMessageBox.AcceptRole)
msgBox.addButton("&Continue", QMessageBox.RejectRole)
if msgBox.exec_() == QMessageBox.AcceptRole:
    print "Save Again"
else:
    print "Continue"

复制代码

显示如图:

另一种分步方案:
复制代码

box = QtGui.QMessageBox()
box.setIcon(QtGui.QMessageBox.Question)
box.setWindowTitle('Kaydet!')
box.setText('Kaydetmek İstediğinize Emin Misiniz?')
box.setStandardButtons(QtGui.QMessageBox.Yes | QtGui.QMessageBox.No)
buttonY = box.button(QtGui.QMessageBox.Yes)
buttonY.setText('Evet')
buttonN = box.button(QtGui.QMessageBox.No)
buttonN.setText('Iptal')
box.exec_()

if box.clickedButton() == buttonY:
    print 'YES pressed'
elif box.clickedButton() == buttonN:
   print 'NO pressed'

复制代码

谁可知之?大抵其官方文档可见些解释吧。一些是点击触发事件,一些仅是样式类似。

参考资料

QMessageBox - PySide v1.0.7 documentation

QDialogButtonBox Class | Qt 4.8
分类: Python

### Python 函数签名解析 在 Python 中,`QMessageBox.question` 是 PyQtPySide 库中的一个静态方法,用于显示一个带有自定义按钮的消息对话框。以下是对其函数签名的详细解释: #### 函数签名 ```python def question( parent: Optional[QWidget], title: Optional[str], text: Optional[str], buttons: Union[QMessageBox.StandardButtons, QMessageBox.StandardButton], defaultButton: QMessageBox.StandardButton = QMessageBox.NoButton ) -> QMessageBox.StandardButton: ``` --- #### 参数说明 1. **parent**: 类型为 `Optional[QWidget]`,表示消息框的父窗口部件(Widget)。如果设置为 `None`,则该消息框不会依附于任何父窗口。这通常用于独立弹窗的情况[^2]。 2. **title**: 类型为 `Optional[str]`,表示消息框的标题栏文字。可以为空字符串或省略不传入。 3. **text**: 类型为 `Optional[str]`,表示消息框主体区域的文字内容。同样支持空字符串或省略。 4. **buttons**: 类型为 `Union[QMessageBox.StandardButtons, QMessageBox.StandardButton]`,允许传递单个标准按钮或多个组合的标准按钮集合。例如: - 单一按钮:`QMessageBox.Ok` - 组合按钮:`QMessageBox.Yes | QMessageBox.No` 表示提供“是”和“否”两个选项[^3]。 5. **defaultButton** (可选,默认值为 `QMessageBox.NoButton`): 指定默认被激活的按钮。如果没有指定,则无默认按钮。此参数确保用户交互时有预设焦点[^1]。 --- #### 返回值 返回值类型为 `QMessageBox.StandardButton`,代表用户点击的具体按钮。例如: - 如果用户点击了 “Yes”,则返回 `QMessageBox.Yes`。 - 如果用户点击了 “No”,则返回 `QMessageBox.No`。 --- #### 使用示例 以下是一个完整的 Python 示例代码片段,展示如何调用 `QMessageBox.question` 方法并处理其返回值: ```python from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QVBoxLayout, QWidget, QMessageBox class MainWindow(QMainWindow): def __init__(self): super().__init__() self.init_ui() def init_ui(self): layout = QVBoxLayout() button = QPushButton("Ask Question") button.clicked.connect(self.show_question_dialog) container = QWidget() container.setLayout(layout) layout.addWidget(button) self.setCentralWidget(container) def show_question_dialog(self): reply = QMessageBox.question( self, "Confirmation", "Are you sure you want to delete this file?", QMessageBox.Yes | QMessageBox.No, QMessageBox.No ) if reply == QMessageBox.Yes: print("User chose Yes.") elif reply == QMessageBox.No: print("User chose No.") if __name__ == "__main__": app = QApplication([]) window = MainWindow() window.show() app.exec_() ``` --- #### 常见错误分析 当遇到类似于 `TypeError: argument 1 has unexpected type 'Ui_MainWindow'` 的错误时,通常是由于第一个参数 `parent` 被误用了非 `QWidget` 对象引起的。例如,在某些情况下可能将 UI 文件生成类实例直接作为父对象传入,而未将其转换为实际的窗口部件实例[^2]。 解决办法是确保 `parent` 参数始终指向有效的 `QWidget` 实例或者显式赋值为 `None`。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值