赞
踩
网上找了好久都没有找到这方面的知识,要么说的很含糊。看的真的是在难受,故而写成此文分享,转载请注明出处!谢谢!
首先要理解转换的原理:
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):
- # -*- coding: utf-8 -*-
-
- # Form implementation generated from reading ui file 'Window.ui'
- #
- # Created by: PyQt5 UI code generator 5.10.1
- #
- # WARNING! All changes made in this file will be lost!
-
- from PyQt5 import QtCore, QtGui, QtWidgets
-
- class Ui_MainWindow(object):
- def setupUi(self, MainWindow):
- MainWindow.setObjectName("MainWindow")
- MainWindow.resize(869, 751)
- self.centralwidget = QtWidgets.QWidget(MainWindow)
- self.centralwidget.setObjectName("centralwidget")
- self.BtnHello = QtWidgets.QPushButton(self.centralwidget)
- self.BtnHello.setGeometry(QtCore.QRect(90, 110, 93, 28))
- self.BtnHello.setObjectName("BtnHello")
- self.BtnWorld = QtWidgets.QPushButton(self.centralwidget)
- self.BtnWorld.setGeometry(QtCore.QRect(300, 110, 93, 28))
- self.BtnWorld.setObjectName("BtnWorld")
- self.BtnCh = QtWidgets.QPushButton(self.centralwidget)
- self.BtnCh.setGeometry(QtCore.QRect(480, 370, 93, 28))
- self.BtnCh.setObjectName("BtnCh")
- self.BtnEn = QtWidgets.QPushButton(self.centralwidget)
- self.BtnEn.setGeometry(QtCore.QRect(480, 430, 93, 28))
- self.BtnEn.setObjectName("BtnEn")
- MainWindow.setCentralWidget(self.centralwidget)
- self.menubar = QtWidgets.QMenuBar(MainWindow)
- self.menubar.setGeometry(QtCore.QRect(0, 0, 869, 26))
- self.menubar.setObjectName("menubar")
- MainWindow.setMenuBar(self.menubar)
- self.statusbar = QtWidgets.QStatusBar(MainWindow)
- self.statusbar.setObjectName("statusbar")
- MainWindow.setStatusBar(self.statusbar)
-
- self.retranslateUi(MainWindow)
- QtCore.QMetaObject.connectSlotsByName(MainWindow)
-
- def retranslateUi(self, MainWindow):
- _translate = QtCore.QCoreApplication.translate
- MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
- self.BtnHello.setText(_translate("MainWindow", "Hello"))
- self.BtnWorld.setText(_translate("MainWindow", "world"))
- self.BtnCh.setText(_translate("MainWindow", "中文"))
- self.BtnEn.setText(_translate("MainWindow", "英文"))
-
3,新建一个WindowTest.py文件(使得逻辑与业务分离),着重看我代码里面的注释的地方
- from Window import Ui_MainWindow
-
- from PyQt5.QtCore import *
- from PyQt5.QtWidgets import *
- from PyQt5.QtGui import *
- import sys
-
- class MyWindow(QMainWindow, Ui_MainWindow):
- def __init__(self, parent=None):
- super(MyWindow, self).__init__(parent)
- self.setupUi(self)
-
- # 翻译家
- self.trans = QTranslator()
-
- # 连接到槽函数
- self.BtnEn.clicked.connect(self._trigger_english)
- self.BtnCh.clicked.connect(self._trigger_zh_cn)
-
- def _trigger_english(self):
- print("[MainWindow] Change to English")
- self.trans.load("en")
- _app = QApplication.instance() # 获取app实例
- _app.installTranslator(self.trans)
- # 重新翻译界面
- self.retranslateUi(self)
- pass
-
- def _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)
- pass
-
-
- if __name__ == "__main__":
- app = QApplication(sys.argv)
- mainWindow = MyWindow()
- mainWindow.show()
- sys.exit(app.exec_())
4,运行WindowTest.py文件,初始图如下:
点击英文按钮后,界面全部变成英文的:
再次点击中文按钮,界面又恢复为中文的:
好了,End。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。