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

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.hqwc.cn/news/102167.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

读高性能MySQL(第4版)笔记04_操作系统和硬件优化

1. 从软件本身和它运行的典型工作负载来看,MySQL通常也更适合运行在廉价硬件上 2. 基本资源 2.1. CPU 2.2. 内存 2.3. 磁盘 2.4. 瓶颈 2.5. 网络资源 3. CPU 3.1. 最常见的瓶颈是CPU耗尽 3.2. 检查CPU使用率来确定工作负载是否受CPU限制 3.3. 低延迟&…

MinIO集群模式信息泄露漏洞(CVE-2023-28432)

前言:MinIO是一个用Golang开发的基于Apache License v2.0开源协议的对象存储服务。虽然轻量,却拥有着不错的性能。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据。该漏洞会在前台泄露用户的账户和密码。 0x00 环境配置 …

c++中的list容器讲解

文章目录 1. list的介绍及使用1.1 list的介绍1.2 list的使用1.2.1 list的构造1.2.2 list iterator的使用1.2.3 list capacity1.2.4 list element access1.2.6 list的迭代器失效 2. list的模拟实现2.1 模拟实现list 3. list与vector的对比 1. list的介绍及使用 1.1 list的介绍 …

Kafka3.0.0版本——增加副本因子

目录 一、服务器信息二、启动zookeeper和kafka集群2.1、先启动zookeeper集群2.2、再启动kafka集群 三、增加副本因子3.1、增加副本因子的概述3.2、增加副本因子的示例3.2.1、创建topic(主题)3.2.2、手动增加副本存储 一、服务器信息 四台服务器 原始服务器名称原始服务器ip节点…

时序预测 | MATLAB实现TCN-BiLSTM时间卷积双向长短期记忆神经网络时间序列预测

时序预测 | MATLAB实现TCN-BiLSTM时间卷积双向长短期记忆神经网络时间序列预测 目录 时序预测 | MATLAB实现TCN-BiLSTM时间卷积双向长短期记忆神经网络时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.MATLAB实现TCN-BiLSTM时间卷积双向长短期记忆神…

Web framework-Gin(二)

目录 一、Gin 1、Ajax 2、文件上传 2.1、form表单中文件上传(单个文件) 2.2、form表单中文件上传(多个文件) 2.3、ajax上传单个文件 2.4、ajax上传多个文件 3、模板语法 4、数据绑定 5、路由组 6、中间件 一、Gin 1、Ajax AJAX 即“Asynchronous Javascript And XM…

数据库 范式化和反范式化

第一范式 1NF 主要确保数据表中每个字段的值必须具有原子性,也就是说数据表中每个字段的值为不可再次拆分的最小数据单元 第二范式 2NF 在满足第一范式的基础上,还要满足数据表里的每一条数据记录,都是可唯一标识的,而且所有非…

使用半导体材料制作霍尔元件的优点

霍尔元件是一种基于霍尔效应的传感器,可以测量磁场强度和电流等物理量。霍尔效应是指,当电流通过一块导体时,如果该导体置于垂直于电流方向的磁场中,就会在导体两侧出现一定的电势差,这就是霍尔效应。霍尔元件可以利用…

C++-map和set

本期我们来学习map和set 目录 关联式容器 键值对 pair 树形结构的关联式容器 set multiset map multimap 关联式容器 我们已经接触过 STL 中的部分容器,比如: vector 、 list 、 deque 、forward_list(C11)等,这些容器统称为序列式…

【Rust】001-基础语法:变量声明及数据类型

【Rust】001-基础语法:变量声明及数据类型 文章目录 【Rust】001-基础语法:变量声明及数据类型一、概述1、学习起源2、依托课程 二、入门程序1、Hello World2、交互程序代码演示执行结果 3、继续上难度:访问链接并打印响应依赖代码执行命令 三…

《Java程序设计》实验报告

实验内容:面向对象程序设计 1、定一个名为Person的类,其中含有一个String类型的成员变量name和一个int类型的成员变量age, 分别为这两个变量定义访问方法和修改方法,另外再为该类定义一个名为speak的方法, 在其中输出n…

role、user、schema在Oracle、MySQL、PostgreSQL的区别

0.先上结论 数据库逻辑可以细分为:角色、用户、数据库、模式PostgreSQL和MySQL合并了角色和用户,MySQL还合并了数据库、模式Oracle合并了用户、数据库、模式 1.图 1.1.架构 1.2.用户和角色 1.2.1.PostgreSQL 1.2.2.MySQL 1.2.3.Oracle 参考文章 数据…