继上次写完《如何用Pyqt5实现在程序中动态修改界面的语言(英语转中文或者中文转英语)》一文后,有的朋友提出希望在多个界面中实现动态修改界面语言,而我上次写的文章只能实现主界面的动态语言的修改,不满足朋友的要求,故而写成此文以解决朋友的问题,希望此文对您有帮助!

需要说明的是,本文是在《如何用Pyqt5实现在程序中动态修改界面的语言(英语转中文或者中文转英语)》的基础上完成,如果有读者还不是很了解相关原理,请先阅读那篇文章。

先来看看效果吧:

PyQt中多界面动态修改语言(中英文切换)

原理分析:

0.预备的东西——在子模块中定义好一个“翻译家”
class MySubDialog(QDialog, Ui_Dialog):     # UI与逻辑分离def __init__(self, parent=None):super(MySubDialog, self).__init__(parent)self.setupUi(self)self.retranslateUi(self)# 翻译家self.trans = QTranslator()pass
1.获得主应用程序对象实例
_app = QApplication.instance()
2.主应用程序对象实例为子模块重新安装“翻译家”
 _app.installTranslator(self.subDialog.trans)
3.子模块调用自己的翻译函数retranslateUi,注意函数的参数
self.subDialog.retranslateUi(self.subDialog)

实际操作:

1.在Qt designer中准备好子模块的UI界面,并保存为SubDialog.ui,我的如下图所示,读者根据自己的需求更改。

2.打开cmd窗口,进入到Subdialog.ui的文件夹中,利用pyuic5这个程序将Subdialog.ui转化为Subdialog.py文件。
pyuic5 -o Subdialog.py SubDialog.ui
3.同样在cmd窗口中,用pylupdate5命令生成.ts文件(具体详情参考先前的文章)
pylupdate5 Window.py Subdialog.py -ts zh_CN.ts    # 中文
pylupdate5 Window.py Subdialog.py -ts en.ts           # 英文
4.用Qt Linguist.exe(这个程序一般在你安装Python的文件夹/Lib/site-packages/pyqt5-tools下面),用它打开刚刚生成的xxxx.ts文件翻译,这里就不配图了,请参考先前的文章。
5.新建一个Subdialog_Logical.py文件,在该文件中新建一个类MySubDialog,在这个类中写自己的逻辑代码,这么做的目的是为了UI与逻辑分离。这里我为了方便,直接在原先的WindowTest.py中定义了该类,并在该类中添加一个成员变量self.trans,即它的翻译家,读者可根据自己的需求自行更改,我的代码如下。
class MySubDialog(QDialog, Ui_Dialog):def __init__(self, parent=None):super(MySubDialog, self).__init__(parent)self.setupUi(self)self.retranslateUi(self)# 翻译家self.trans = QTranslator()pass
5.给出更改后的WindowTest.py的源代码,运行即可得到视频中的效果。
from Window import Ui_MainWindow
from SubDialog import Ui_Dialog
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from  PyQt5.QtGui import *
import sysclass MyWindow(QMainWindow, Ui_MainWindow):def __init__(self, parent=None):super(MyWindow, self).__init__(parent)self.setupUi(self)# 注意需要在构造函数中初始化子对话框self.subDialog = MySubDialog()#  翻译家self.trans = QTranslator()# 连接到槽函数self.BtnEn.clicked.connect(self._trigger_english)self.BtnCh.clicked.connect(self._trigger_zh_cn)self.BtnOpenSubWindow.clicked.connect(self.openSubWindow)def openSubWindow(self):# 子窗口显示self.subDialog.show()def _trigger_english(self):print("[MainWindow] Change to English")self.trans.load("en")_app = QApplication.instance()  # 获取app实例_app.installTranslator(self.trans) # 重新翻译主界面self.retranslateUi(self)_app.installTranslator(self.subDialog.trans) # 为子模块安装翻译self.subDialog.retranslateUi(self.subDialog) # 翻译子模块passdef _trigger_zh_cn(self):print("[MainWindow] Change to zh_CN")self.trans.load("zh_CN")_app = QApplication.instance()_app.installTranslator(self.trans)self.retranslateUi(self)_app.installTranslator(self.subDialog.trans)self.subDialog.retranslateUi(self.subDialog)class MySubDialog(QDialog, Ui_Dialog):def __init__(self, parent=None):super(MySubDialog, self).__init__(parent)self.setupUi(self)self.retranslateUi(self)# 翻译家self.trans = QTranslator()passif __name__ == "__main__":app = QApplication(sys.argv)mainWindow = MyWindow()mainWindow.show()sys.exit(app.exec_())

Pyqt5在程序中动态修改多界面的语言(英语转中文或者中文转英语)相关推荐

  1. 如何用Pyqt5实现在程序中动态修改界面的语言(英语转中文或者中文转英语)

    网上找了好久都没有找到这方面的知识,要么说的很含糊.看的真的是在难受,故而写成此文分享,转载请注明出处!谢谢! 首先要理解转换的原理: 1,Pyqt5的程序一定有一个实例化的QApplication对 ...

  2. uniapp动态显示数组_【报Bug】uniapp 在小程序中 动态修改添加 数组 数据 ,点击获取的索引值错误...

    在微信小程序中会有这个问题,h5正常 在 v-for数组列表 同时 :key 值没有用下标设置,而是用其它设置 ,会导致 动态添加数组内容 ,点击列表 获取的 列表下标 错误 重现步骤 {{title ...

  3. linux 软件集成工具箱,在PB中动态修改SQL语句

    在PB中动态修改SQL语句 分享到: 江苏省南通电信局网管中心 黄莹 ---- PowerBuilder是图形界面的Client/Server应用程序开发环境,可以很容易开发出功能强大的应用程序,在当 ...

  4. exists 实现查看表Activity中FmyId=1(具体数字在程序中动态给定)的好友发起的活动

    一个数据库tb 两个表:FriendTable  Activity 其中 FriendTable : 内容 Activity: 内容: 实现查看表Activity中FmyId=1(具体数字在程序中动态 ...

  5. 微信会员卡html修改样式模板,微信小程序 JS动态修改样式的实现代码

    微信小程序这个坑啊,js动态修改样式,我们并不能用js或者jq 轻轻松松一行代码搞定.或者用removeClass addClass 来修改样式. 以下是一种动态修改样式的方法,原理是绑定数据,然后动 ...

  6. (转)Windows应用程序中动态的控制输入法

    在Windows系统中一般都安装了至少三种输入法,在输入数据时常常会切换输入法,虽然Windows系统提供了切换快捷健,但对输入工作还是带来了不少麻烦.如果在应用程序中为用户提供智能输入法自动切换,那 ...

  7. 在微信小程序中动态的添加类名

    在微信小程序中动态的添加类名 <view data-num="1" class="takeTaxi {{_num == 1 ? 'active' : ''}}&qu ...

  8. c 程序多语言,怎样在程序中利用C支持多国语言

    怎样在程序中利用C支持多国语言 本文以emule为例,探讨一下多国语言支持的实现.选择emule,因为它的多国语言支持实现的相当好,可以支持动态切换.而且最关键,它是开源的,可以直接通过源码来研究它的 ...

  9. 微信开发修改button里的字体大小_在微信小程序中如何修改文字大小

    这篇文章主要介绍了微信小程序实现点击按钮修改文字大小功能,涉及微信小程序事件绑定及setData动态修改Page页面data数据,进而控制页面元素属性动态改变的相关操作技巧,需要的朋友可以参考下 本文 ...

最新文章

  1. Java线程---休眠问题来看并发执行
  2. Gradle 之 Android 中的应用
  3. 22 Notification 通知栏代码
  4. raw_input 与 input的区别
  5. iOS开发--地图与定位
  6. Linux 设备管理和进程管理
  7. 设计模式笔记[四种模式+四种原则]
  8. netlink的博客
  9. HeroM2连击技能设置和DB完整数据
  10. Unity 置顶点击的对象
  11. 【技能】Zoho CRM系统无代码集成智齿客服、企业微信群机器人方法
  12. Jenkins远程命令执行漏洞(CVE-2018-1000861)
  13. cygwin中安装apt-cyg管理工具注意事项
  14. mysql-server-5.6 deb_linux下安装mysql-server-5.6的问题
  15. BFPRT算法:时间复杂度O(n)求第k小的数字(分治算法+快排)
  16. 找了好久的perl在window上读excel的脚本
  17. 使用 Jquery AjaxUpload 上传图片
  18. 变频器源码、图纸、伺服驱动器和变频器源码、图纸、生产方案
  19. vue-element-admin 三级路由无法跳转
  20. 发布:双人联机岛屿争夺游戏 Enemies in the dark

热门文章

  1. C语言strcat函数
  2. #1055 : 刷油漆
  3. 单例设计模式——枚举方式
  4. Maven中profile和filtering实现多个环境下的属性过滤
  5. JFinal 开箱评测,这次我是认真的
  6. 编写程序判断输入的字符串是否是“回文”
  7. KVM的NAT网络和bridge网络安装
  8. 三星s6android7.0资源,不忘老旗舰!三星S6系列月底升至Android 7.0
  9. 【iOS-iap防护】验证用户付费收据!拒绝iap Cracker!拒绝iap Free!让iphone越狱用户无从下手!
  10. 一曲肝肠断,天涯何处寻代码d