У меня есть простая программа, в которой я хочу переключать языки во время выполнения. Поскольку GUI не выполняется с QtDesigner, у меня нет файла .ui и, следовательно, я не могу использовать ui.retranslateUi, насколько я могу видеть. Мой текущий путь решения этой вручную призывающую SetText на каждом виджете каждый раз, когда происходит событие изменения языка:PySide: динамически менять язык во время выполнения без ui.retranslateUi
from PySide.QtCore import *
from PySide.QtGui import *
import sys
class Simple(QPushButton):
def __init__(self):
super().__init__('translate-me')
self.translator = QTranslator()
self.clicked.connect(self.switchLanguage)
self.show()
def changeEvent(self, event):
if event.type() == QEvent.Type.LanguageChange:
self.setText(self.tr('translate-me'))
def switchLanguage(self):
self.translator.load('translation-file')
QApplication.installTranslator(self.translator)
app = QApplication(sys.argv)
simple = Simple()
sys.exit(app.exec_())
Решение с использованием ui.retranslateUi, как описано here намного короче, хотя. Есть ли решение, подобное тому, когда не используется файл .ui для графического интерфейса?
Это, вероятно, не стоит. Вы можете разрешить пользователю изменять языки, а затем дать им возможность перезапустить приложение. 'retranslateUi' не магически исправляет все, каждое использование' tr() 'в вашем коде должно быть проверено, чтобы убедиться, что оно обновит любые видимые строки при изменении языков. Обычно это трудно сделать, если только вы не начинаете разработку, - и тогда вам придется разработать какой-то общий шаблон для его реализации, который должен придерживаться каждый фрагмент вашего кода, который использует видимую пользователем строку. –