【python】PySide中QMessageBox设置中文按钮及使用

news/2024/11/29 13:36:42/

PyQt、PySide使用QMessageBox的时候会发现按钮都是英文的,对于中文的应用软件来说会降低使用体验。本文将以问答对话框为例,介绍如何设置中文按钮,以及如何使用。

实验环境

本文实验环境为:Windows 10,Python 3.8,PySide==6.5.0。其他版本的PySide或PyQt也可以使用类似的方法进行设置和使用。

问答(Question)

如下代码定义了一个汉化后问答对话框的类,默认Yes按钮显示“是”,No按钮显示“否”。可以通过yes_button_set_textno_button_set_text方法来覆盖默认的Yes、No按钮显示。

from PySide6.QtCore import Qt
from PySide6.QtWidgets import QMessageBoxclass QuestionMsgBox(QMessageBox):def __init__(self, title, text):super().__init__()self.setWindowModality(Qt.WindowModality.ApplicationModal)self.setWindowTitle(title)self.setIcon(QMessageBox.Icon.Question)self.setText(text)self.setStandardButtons(QMessageBox.StandardButton.Yes | QMessageBox.StandardButton.No)self.yes_button = self.button(QMessageBox.StandardButton.Yes)self.no_button = self.button(QMessageBox.StandardButton.No)self.yes_button.setText('是')  # 默认Yes按钮为“是”self.no_button.setText('否')  # 默认No按钮为“否”def yes_button_set_text(self, text):self.yes_button.setText(text)def no_button_set_text(self, text):self.no_button.setText(text)

单独测试

接下来将单独测试问答对话框,代码如下所示。

from PySide6.QtCore import Qt
from PySide6.QtWidgets import QMessageBoxclass QuestionMsgBox(QMessageBox):def __init__(self, title, text):super().__init__()self.setWindowModality(Qt.WindowModality.ApplicationModal)self.setIcon(QMessageBox.Icon.Question)self.setWindowTitle(title)self.setText(text)self.setStandardButtons(QMessageBox.StandardButton.Yes | QMessageBox.StandardButton.No)self.yes_button = self.button(QMessageBox.StandardButton.Yes)self.no_button = self.button(QMessageBox.StandardButton.No)self.yes_button.setText('是')self.no_button.setText('否')def yes_button_set_text(self, text):self.yes_button.setText(text)def no_button_set_text(self, text):self.no_button.setText(text)def yes_func():print('Pressed yes button')def no_func():print('Pressed no button')def main():app = QApplication([])msg_box = QuestionMsgBox('标题', '确认内容?')msg_box.yes_button.clicked.connect(yes_func)msg_box.no_button.clicked.connect(no_func)msg_box.show()app.exec()if __name__ == '__main__':main()

程序运行后,显示如图1所示问答对话框。单击“是”,将运行yes_func()函数;单击“否”,将运行no_func()函数。

需要注意的是:在单独测试对话框的时候,main()函数中需使用msg_box.show()方法来显示对话框,而不能使用msg_box.exec()方法。否则,程序将无法结束,需强行关闭程序。

在这里插入图片描述

图1

应用测试

最后是在应用中测试问答对话框,代码如下所示。

from PySide6.QtCore import Qt
from PySide6.QtGui import QScreen, QFont
from PySide6.QtWidgets import QApplication, QMessageBox, QWidget, QVBoxLayout, QHBoxLayout, QPushButton, QLabel, QLineEditclass QuestionMsgBox(QMessageBox):def __init__(self, title, text):super().__init__()self.setWindowModality(Qt.WindowModality.ApplicationModal)self.setIcon(QMessageBox.Icon.Question)self.setWindowTitle(title)self.setText(text)self.setStandardButtons(QMessageBox.StandardButton.Yes | QMessageBox.StandardButton.No)self.yes_button = self.button(QMessageBox.StandardButton.Yes)self.no_button = self.button(QMessageBox.StandardButton.No)self.yes_button.setText('是')self.no_button.setText('否')def yes_button_set_text(self, text):self.yes_button.setText(text)def no_button_set_text(self, text):self.no_button.setText(text)class AppGUI(QWidget):def __init__(self):super().__init__()# set windowself.setWindowTitle('应用窗口')win_width = 290win_height = 80self.setFixedWidth(win_width)self.setFixedHeight(win_height)screen_size = QScreen.availableGeometry(QApplication.primaryScreen())win_x = (screen_size.width() - win_width) / 2win_y = (screen_size.height() - win_height) / 2self.move(win_x, win_y)self.setFont(QFont('Microsoft YaHei UI', 12))# set layoutself.win_layout = QVBoxLayout()self.main_layout = QHBoxLayout()self.setLayout(self.win_layout)# widgetself.open_button = QPushButton('打开问答对话框')self.open_button.clicked.connect(self.open_question_msg_box)self.win_layout.addWidget(self.open_button)self.win_layout.addLayout(self.main_layout)self.label = QLabel('单击的按钮:')self.main_layout.addWidget(self.label)self.entry = QLineEdit()self.main_layout.addWidget(self.entry)def open_question_msg_box(self):msg_box = QuestionMsgBox('标题', f'确认内容?')msg_box.yes_button.clicked.connect(self.yes_func)msg_box.no_button.clicked.connect(self.no_func)msg_box.exec()def yes_func(self):self.entry.setText('是')def no_func(self):self.entry.setText('否')def main():app = QApplication([])app_gui = AppGUI()app_gui.show()app.exec()if __name__ == '__main__':main()

程序运行后,打开如图2所示界面。单击“打开问答对话框”,打开如图1所示问答对话框,单击问答对话框的按钮后,将会将所单击的按钮文本打印在输入框中。若单击“是”,则如图3所示;若单击“否”,则如图4所示。

需要注意的是:在应用测试中使用对话框的时候,AppGUI类中的open_question_msg_box方法需使用msg_box.exec()方法,而不能使用msg_box.show()方法。否则,对话框将会一闪而过。

在这里插入图片描述

图2

在这里插入图片描述

图3

在这里插入图片描述

图4

联系我

如有疑问,邮件是最快联系我的方式:wm_chen@yeah.net


http://www.ppmy.cn/news/1094868.html

相关文章

回归预测 | MATLAB实现PCA-BP主成分降维结合BP神经网络多输入单输出回归预测

回归预测 | MATLAB实现PCA-BP主成分降维结合BP神经网络多输入单输出回归预测 目录 回归预测 | MATLAB实现PCA-BP主成分降维结合BP神经网络多输入单输出回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 MATLAB实现PCA-BP主成分降维算法结合BP神经网络多输入单输出回…

Python中的数据输入

获取键盘输入 input语句 使用input()可以从键盘获取输入,使用一个变量来接收 print("你是谁?") name input() print(f"我知道了,你是{name}")# print("你是谁?") name input("你是谁&…

【C++二叉树】进阶OJ题

【C二叉树】进阶OJ题 目录 【C二叉树】进阶OJ题1.二叉树的层序遍历II示例代码解题思路 2.二叉搜索树与双向链表示例代码解题思路 3.从前序与中序遍历序列构造二叉树示例代码解题思路 4.从中序与后序遍历序列构造二叉树示例代码解题思路 5.二叉树的前序遍历(非递归迭…

《好笑的爱》阅读笔记

《好笑的爱》阅读笔记 是暑期认识的一位川大的同学推荐的,说他喜欢的一个作家是米兰昆德拉,喜欢他的短篇小说集《好笑的爱》。于是去武汉中心书城顺便买了两本书,另外还买了一本是《帷幕》,至今还没有看。 这本书总共包含了几篇短…

空气净化器上亚马逊美国站需要办理什么认证?空气净化器UL867测试报告如何办理?

空气净化器又称“空气清洁器”、空气清新机、净化器,是指能够吸附、分解或转化各种空气污染物(一般包括PM2.5、粉尘、花粉、异味、甲醛之类的装修污染、细菌、过敏原等),有效提高空气清洁度的产品,主要分为家用 、商用…

【已解决】Unknown initial character set index ‘45‘ received from server

出现这个数据库连接异常,可能是数据库太新,所以更新一下JDBC连接驱动,原来的是5.0.4 ,现在换成5.1.47.连接成功。 参考其他博主的文章:Java——连接数据库MySQL 5.7和8.0的区别_这段语句mysql5.7和8.0有什么区别url: …

concurrentHashMap jdk1.8

文章目录 属性:内部类:Node链表节点:ForwardingNode节点:TreeNode节点:TreeBin节点: put方法treeifyBin方法:tryPresize方法:addCount方法helpTransfer方法:transfer方法…

【随想】每日两题Day.1

题目:LeetCode 704.二分查找 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。 示例 1: 输入: nums [-1,0,3…