当前位置:   article > 正文

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

qtcore.qcoreapplication.translate

    网上找了好久都没有找到这方面的知识,要么说的很含糊。看的真的是在难受,故而写成此文分享,转载请注明出处!谢谢!

    首先要理解转换的原理:

1,Pyqt5的程序一定有一个实例化的QApplication对象,不妨叫它为app。但是如何在程序中得到这个实例化的对象app呢?没错,使用__app(这个名字你随便取) = QApplication.instance()方法。那么__app就是你在程序中创建的应用程序实例了。

2,(应用程序实例的对象app或者__app,为了程序中的结构不被破坏,一般使用__app)调用它的installTranslator(参数后面讲,不要着急,慢慢看)为它"安装"一个"翻译"。

3,installTranslator的参数当然就是翻译家了,即self.trans(这个名字你随便取) = QTranslator()  ,self.trans这个翻译家需要去load已经弄好翻译好的文件xxxx.qm。xxxx.qm是一个二进制的文件,它由xxxx.ts生成。

4,xxxx.ts的生成如下,进入你编写py文件的目录下,使用pylupdate5命令。它的语法规则为:

pylupdate5 要翻译的py文件的名字.py  -ts   随便取个名字  -ts         (备注:那个随便取的名字一般要见名知意,譬如zh_CN就是中文简体,en就是英文等等balabala)

5,用Qt Linguist.exe(这个程序一般在你安装Python的文件夹/Lib/site-packages/pyqt5-tools下面),用它打开刚刚生成的xxxx.ts文件翻译,如下图:

需要注意的是,你每翻译好一个后要打上那个√!。所有的弄好了后,点击file中的Release。就会在当前文件夹下生成xxxx.qm文件了。

 

 

 

 

下面是我的做法:

1,使用Qt designer 设计界面如下:

2,将这个UI文件使用Pyuic5命令(这个不会烦请自行Google)转化为py文件,我生成的py文件如下(我的文件名为Window.py):

  1. # -*- coding: utf-8 -*-
  2. # Form implementation generated from reading ui file 'Window.ui'
  3. #
  4. # Created by: PyQt5 UI code generator 5.10.1
  5. #
  6. # WARNING! All changes made in this file will be lost!
  7. from PyQt5 import QtCore, QtGui, QtWidgets
  8. class Ui_MainWindow(object):
  9. def setupUi(self, MainWindow):
  10. MainWindow.setObjectName("MainWindow")
  11. MainWindow.resize(869, 751)
  12. self.centralwidget = QtWidgets.QWidget(MainWindow)
  13. self.centralwidget.setObjectName("centralwidget")
  14. self.BtnHello = QtWidgets.QPushButton(self.centralwidget)
  15. self.BtnHello.setGeometry(QtCore.QRect(90, 110, 93, 28))
  16. self.BtnHello.setObjectName("BtnHello")
  17. self.BtnWorld = QtWidgets.QPushButton(self.centralwidget)
  18. self.BtnWorld.setGeometry(QtCore.QRect(300, 110, 93, 28))
  19. self.BtnWorld.setObjectName("BtnWorld")
  20. self.BtnCh = QtWidgets.QPushButton(self.centralwidget)
  21. self.BtnCh.setGeometry(QtCore.QRect(480, 370, 93, 28))
  22. self.BtnCh.setObjectName("BtnCh")
  23. self.BtnEn = QtWidgets.QPushButton(self.centralwidget)
  24. self.BtnEn.setGeometry(QtCore.QRect(480, 430, 93, 28))
  25. self.BtnEn.setObjectName("BtnEn")
  26. MainWindow.setCentralWidget(self.centralwidget)
  27. self.menubar = QtWidgets.QMenuBar(MainWindow)
  28. self.menubar.setGeometry(QtCore.QRect(0, 0, 869, 26))
  29. self.menubar.setObjectName("menubar")
  30. MainWindow.setMenuBar(self.menubar)
  31. self.statusbar = QtWidgets.QStatusBar(MainWindow)
  32. self.statusbar.setObjectName("statusbar")
  33. MainWindow.setStatusBar(self.statusbar)
  34. self.retranslateUi(MainWindow)
  35. QtCore.QMetaObject.connectSlotsByName(MainWindow)
  36. def retranslateUi(self, MainWindow):
  37. _translate = QtCore.QCoreApplication.translate
  38. MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
  39. self.BtnHello.setText(_translate("MainWindow", "Hello"))
  40. self.BtnWorld.setText(_translate("MainWindow", "world"))
  41. self.BtnCh.setText(_translate("MainWindow", "中文"))
  42. self.BtnEn.setText(_translate("MainWindow", "英文"))

3,新建一个WindowTest.py文件(使得逻辑与业务分离),着重看我代码里面的注释的地方

  1. from Window import Ui_MainWindow
  2. from PyQt5.QtCore import *
  3. from PyQt5.QtWidgets import *
  4. from PyQt5.QtGui import *
  5. import sys
  6. class MyWindow(QMainWindow, Ui_MainWindow):
  7. def __init__(self, parent=None):
  8. super(MyWindow, self).__init__(parent)
  9. self.setupUi(self)
  10. # 翻译家
  11. self.trans = QTranslator()
  12. # 连接到槽函数
  13. self.BtnEn.clicked.connect(self._trigger_english)
  14. self.BtnCh.clicked.connect(self._trigger_zh_cn)
  15. def _trigger_english(self):
  16. print("[MainWindow] Change to English")
  17. self.trans.load("en")
  18. _app = QApplication.instance() # 获取app实例
  19. _app.installTranslator(self.trans)
  20. # 重新翻译界面
  21. self.retranslateUi(self)
  22. pass
  23. def _trigger_zh_cn(self):
  24. print("[MainWindow] Change to zh_CN")
  25. self.trans.load("zh_CN")
  26. _app = QApplication.instance()
  27. _app.installTranslator(self.trans)
  28. self.retranslateUi(self)
  29. pass
  30. if __name__ == "__main__":
  31. app = QApplication(sys.argv)
  32. mainWindow = MyWindow()
  33. mainWindow.show()
  34. sys.exit(app.exec_())

4,运行WindowTest.py文件,初始图如下:

点击英文按钮后,界面全部变成英文的:

再次点击中文按钮,界面又恢复为中文的:

 

 

好了,End。

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/219771
推荐阅读
相关标签
  

闽ICP备14008679号