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

news2024/12/30 2:11:38

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 QMessageBox


class 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 QMessageBox


class 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, QLineEdit


class 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 window
        self.setWindowTitle('应用窗口')
        win_width = 290
        win_height = 80
        self.setFixedWidth(win_width)
        self.setFixedHeight(win_height)
        screen_size = QScreen.availableGeometry(QApplication.primaryScreen())
        win_x = (screen_size.width() - win_width) / 2
        win_y = (screen_size.height() - win_height) / 2
        self.move(win_x, win_y)
        self.setFont(QFont('Microsoft YaHei UI', 12))
        # set layout
        self.win_layout = QVBoxLayout()
        self.main_layout = QHBoxLayout()
        self.setLayout(self.win_layout)
        # widget
        self.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.coloradmin.cn/o/985020.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

UI基础——UGUI源码架构

文章目录 如何阅读源码UGUI源码整体架构源码整体类图事件模块EventSystem类图点击事件时序图 参考: 如何阅读源码 阅读源码是提高编程能力和技术水平的重要途径之一。以下是一些有效的阅读源码的方法: 确定目标:(1)了…

Linux系统中实现便捷运维管理和远程访问的1Panel部署方法解析

文章目录 前言 前言 1Panel 是一个现代化、开源的 Linux 服务器运维管理面板。高效管理,通过 Web 端轻松管理 Linux 服务器,包括主机监控、文件管理、数据库管理、容器管理等下面我们介绍在Linux 本地安装1Panel 并结合cpolar 内网穿透工具实现远程访问1Panel 管理…

【C刷题训练营】第三讲(c语言入门训练)

前言: 大家好,我决定日后逐渐更新c刷题训练营的内容,或许能帮到入门c语言的初学者,如果文章有错误,非常欢迎你的指正! 💥🎈个人主页:​​​​​​Dream_Chaser~ 🎈&…

如何做见效快的SEO推广?

答案是:见效快的推广可以选择谷歌SEO谷歌Ads双向运营。 关键词研究 对于任何SEO推广,一切始于准确的关键词研究。 使用专业工具 利用如SEMrush、Ahrefs等工具,找到与你业务相关,但竞争程度较低的关键词。 分析竞争对手 查看…

Mysql性能调优——1.深入理解Mysql索引数据结构和算法

本系列所说的Mysql性能调优,主要是针对开发者在实际环境中的sql调优,代码层面上的优化。不涉及到mysql底层代码的调优。 我们知道,一个mysql数据表,数据量小的时候,可能简单的查询耗时不会太久,性能也可以…

孤儿僵尸守护进程的简单理解

孤儿进程: 一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程所收养,并由init进程对它们完成状态收集工作。 如何模仿一个孤儿进程: 答案是: kill 父…

Docker基础入门:Docker基础总结篇--超详细

Docker基础入门:Docker基础总结篇[docker3要素、docker安装配置、容器使用、镜像管理发布] 一、Docker 3要素1.1、镜像(Image)1.2、容器(Container)1.3、仓库(Registry)1.4 、总结 二、Docker安…

2023 年高教社杯全国大学生数学建模竞赛-E 题 黄河水沙监测数据分析详解+思路+Python代码

2023 年高教社杯全国大学生数学建模竞赛-E 题 黄河水沙监测数据分析 十分激动啊啊啊题目终于出来了!!官网6点就进去了结果直接卡死现在才拿到题目,我是打算A-E题全部做一遍。简单介绍一下我自己:博主专注建模四年,参与…

手写Spring:第12章-基于JDK、Cglib实现AOP切面

文章目录 一、目标:基于JDK、Cglib实现AOP切面二、设计:基于JDK、Cglib实现AOP切面三、实现:基于JDK、Cglib实现AOP切面3.0 引入依赖3.1 工程结构3.2 AOP切点表达式和使用以及基于JDK和CGLIB的动态代理类图3.3 切点表达式3.3.1 类匹配接口3.3…

一生一芯10——verilator v5.008环境搭建

搜索 verilator 官网,得到网址如下: https://www.veripool.org/verilator/ 点击download 找到 git quick install 可以看到git快捷安装所需命令行 可以看到,需要预先安装下面的包文件,去掉前面的#注释符号进行安装 直接进行下面…

全力助推徐工集团转型升级,迅镭激光智能装备展现硬核实力!

在江苏省徐州市,工程机械产业集群在成功入选首批国家先进制造业集群后,正加快向世界级先进制造业集群跃升。徐工集团作为徐州市“343”创新产业集群“一号产业”链主企业,正发挥着“领头雁”作用。 为了把徐州市“全球工程机械之都”名片擦得…

WebGIS外包开发流程

WebGIS开发流程需要综合考虑前端和后端开发、地理信息数据处理、用户需求和安全性等多个方面。成功的WebGIS应用程序需要不断地进行更新和维护,以适应变化的需求和技术。WebGIS开发是一个复杂的过程,通常包括以下主要步骤。北京木奇移动技术有限公司&…

jmeter 接口快速创建

通过cURL命令创建测试计划 从浏览器获取接口 从postman获取接口

2000-2021年上市公司全要素生产率数据(OLS法、OP法、LP法、GMM法、FE法)(含原始数据+计算代码+结果)

2000-2021年上市公司全要素生产率数据(OLS法、OP法、LP法、GMM法、FE法)(含原始数据计算代码结果) 1、时间:2000-2021年 2、指标:股票代码、年份、证券代码、固定资产净额、营业总收入、营业收入、营业成…

[PyTorch][chapter 54][GAN- 1]

前言: GAN playground: Experiment with Generative Adversarial Networks in your browser 生成对抗网络(Generative Adversarial Nets,GAN)是一种基于对抗学习的深度生成模型,最早由Ian Goodfellow于2014年在《Gener…

Android 性能优化--内存优化分析总结

一、内存优化概念 1.1 为什么要做内存优化? 内存优化一直是一个很重要但却缺乏关注的点,内存作为程序运行最重要的资源之一,需要运行过程中做到合理的资源分配与回收,不合理的内存占用轻则使得用户应用程序运行卡顿、ANR、黑屏&…

maven(总)

maven maven的简介 maven主要服务于基于java平台的项目构建,依赖管理和项目信息管理 主要体现在项目和管理 瀑布式开发:在做项目的时候要求有明确的需求,必须按照需求一步一步去做好规划,在项目的运行过程中严格的产出一些文档 …

gdal求矢量图形的形心

gdal求矢量图形的形心 #include "gdal_priv.h" #include "ogrsf_frmts.h"int main() {OGRRegisterAll();OGRPolygon* square_1 new OGRPolygon();OGRLinearRing* ring_1 new OGRLinearRing();// 添加 square_1 的点ring_1->addPoint(0, 0);ring_1-&g…

js--15----闭包是什么?说说闭包的使用场景

1、闭包是什么? 一个函数和对其周围状态(词法环境)的引用绑定在一起(或者说函数被引用包围),这样的组合就是是闭包(closure),也就是说,闭包让你在一个内层函数…

win环境安装SuperMap iserver和配置许可

SuperMap iServer是我国北京超图公司研发的基于跨平台GIS内核的云GIS应用服务器产品,通过服务的方式,面向网络客户端提供与专业GIS桌面产品相同功能的GIS服务,能够管理、发布多源服务,包括REST服务、OGC服务等。 SuperMap iserve…