installTranslator 仅适用于 QMainWindow,不适用于其他窗口(Pyqt)

问题描述 投票:0回答:1

我想在我的 PyQt 应用程序中支持多种语言。我有每种语言的 *.qm 文件,并在应用程序实例上安装我的 QTranslator。它在我的主类中工作正常,但在“设置”模式中不起作用。 有什么问题吗?

这是我的代码:

运行.py

if __name__ == "__main__":
    app = QApplication([])

    translator = QTranslator()
    translator.load(resource_path(r'app_en.qm'))
    app.installTranslator(translator)

    if API.configs.language == 'fa':
        translator.load(resource_path('app_fa.qm'))
        app.installTranslator(translator)
    
    main_window = Main()
    main_window.show()
    app.exec()

主.py

class Main(QMainWindow):
    def __init__(self, parent=None):
        super().__init__(parent)
        ui_path = resource_path('views', 'main.ui')
        loadUi(ui_path, self)
        self.config = ConfigParser()
        self.config.read("MY_CONFIG_PATH")

        self.settings_btn.clicked.connect(self.open_settings_window)

    def open_settings_window(self):
        from forms.settings import Settings

        settings_window = Settings(self.config, parent=self)
        settings_window.exec()

设置.py

class Settings(QDialog):
    def __init__(self, config, parent=None):
        super(Settings, self).__init__(parent)
        ui_file_path = resource_path('views', 'settings.ui')
        loadUi(ui_file_path, self)

在 qt 设计器中:

运行应用程序时:

我保证所有这些话都在我的ts文件中。

qt pyqt pyqt5
1个回答
0
投票

嗯,

  1. 您的对话框没有父级,因此它不会从父级继承任何属性。
  2. 如果您的 open_settings_window 在加载翻译之前执行,即使您确实设置了父级,翻译也很可能不会生效。取决于 Python 中是否有默认的 retranslateUI() 插槽。
  3. 你真的应该看看SO上的这个问题。
© www.soinside.com 2019 - 2024. All rights reserved.