import sys
from PyQt5 import QtCore, QtGui, QtWidgets


class Demo(QtWidgets.QWidget):
    def __init__(self):
        super(Demo, self).__init__()
        self.button = QtWidgets.QPushButton()
        self.label = QtWidgets.QLabel(alignment=QtCore.Qt.AlignCenter)

        self.combo = QtWidgets.QComboBox(self)
        self.combo.currentIndexChanged.connect(self.change_func)

        self.trans = QtCore.QTranslator(self)

        self.v_layout = QtWidgets.QVBoxLayout(self)
        self.v_layout.addWidget(self.combo)
        self.v_layout.addWidget(self.button)
        self.v_layout.addWidget(self.label)

        options = ([('English', ''), ('français', 'eng-fr' ), ('中文', 'eng-chs'), ])
        
        for i, (text, lang) in enumerate(options):
        	self.combo.addItem(text)
        	self.combo.setItemData(i, lang)
        self.retranslateUi()

    @QtCore.pyqtSlot(int)
    def change_func(self, index):
        data = self.combo.itemData(index)
        if data:
            self.trans.load(data)
            QtWidgets.QApplication.instance().installTranslator(self.trans)
        else:
            QtWidgets.QApplication.instance().removeTranslator(self.trans)

    def changeEvent(self, event):
        if event.type() == QtCore.QEvent.LanguageChange:
            self.retranslateUi()
        super(Demo, self).changeEvent(event)

    def retranslateUi(self):
        self.button.setText(QtWidgets.QApplication.translate('Demo', 'Start'))
        self.label.setText(QtWidgets.QApplication.translate('Demo', 'Hello, World'))


if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    demo = Demo()
    demo.show()
    sys.exit(app.exec_())
[(28, 'PyQt5.QtCore.pyqtSlot', 'QtCore.pyqtSlot', False, 'from PyQt5 import QtCore, QtGui, QtWidgets\n'), (48, 'PyQt5.QtWidgets.QApplication', 'QtWidgets.QApplication', False, 'from PyQt5 import QtCore, QtGui, QtWidgets\n'), (8, 'PyQt5.QtWidgets.QPushButton', 'QtWidgets.QPushButton', False, 'from PyQt5 import QtCore, QtGui, QtWidgets\n'), (9, 'PyQt5.QtWidgets.QLabel', 'QtWidgets.QLabel', False, 'from PyQt5 import QtCore, QtGui, QtWidgets\n'), (11, 'PyQt5.QtWidgets.QComboBox', 'QtWidgets.QComboBox', False, 'from PyQt5 import QtCore, QtGui, QtWidgets\n'), (14, 'PyQt5.QtCore.QTranslator', 'QtCore.QTranslator', False, 'from PyQt5 import QtCore, QtGui, QtWidgets\n'), (16, 'PyQt5.QtWidgets.QVBoxLayout', 'QtWidgets.QVBoxLayout', False, 'from PyQt5 import QtCore, QtGui, QtWidgets\n'), (43, 'PyQt5.QtWidgets.QApplication.translate', 'QtWidgets.QApplication.translate', False, 'from PyQt5 import QtCore, QtGui, QtWidgets\n'), (44, 'PyQt5.QtWidgets.QApplication.translate', 'QtWidgets.QApplication.translate', False, 'from PyQt5 import QtCore, QtGui, QtWidgets\n'), (33, 'PyQt5.QtWidgets.QApplication.instance', 'QtWidgets.QApplication.instance', False, 'from PyQt5 import QtCore, QtGui, QtWidgets\n'), (35, 'PyQt5.QtWidgets.QApplication.instance', 'QtWidgets.QApplication.instance', False, 'from PyQt5 import QtCore, QtGui, QtWidgets\n')]