上下文菜单未使用 PyQt5 显示正确的语言

Posted

技术标签:

【中文标题】上下文菜单未使用 PyQt5 显示正确的语言【英文标题】:Context Menu not displaying correct language with PyQt5 【发布时间】:2018-01-08 20:46:01 【问题描述】:

当我尝试使用 PyQt5 创建 Qt 应用程序时,我注意到 QPlainTextEdit 标准上下文菜单以 English 显示,这不是我系统的语言(葡萄牙语),尽管它的语言环境是从其父小部件正确继承的.这是预期的行为吗?如果是这样,我怎样才能添加翻译而不必重写该上下文菜单中已经存在的功能(如剪切/复制/粘贴)?

示例

此程序重现上述行为;它显示一个窗口(因此textEditor.locale().language()QLocale.Portuguese 具有相同的值)但上下文菜单以英文显示。

import sys
from PyQt5.QtWidgets import QApplication, QPlainTextEdit, QMainWindow
from PyQt5.QtCore import QLocale

def main():
    app = QApplication(sys.argv)

    window = QMainWindow()  

    assert(window.locale().language() == QLocale.Portuguese)    
    textEditor = QPlainTextEdit(window)

    assert(textEditor.locale().language() == QLocale.Portuguese)
    window.setCentralWidget(textEditor)
    window.show()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

【问题讨论】:

【参考方案1】:

您需要安装QTranslator 来为您的系统语言环境添加翻译。

import sys
from PyQt5.QtWidgets import QApplication, QPlainTextEdit, QMainWindow
from PyQt5.QtCore import QLocale, QTranslator, QLibraryInfo

def main():
    app = QApplication(sys.argv)

    # Install provided system translations for current locale
    translator = QTranslator()
    translator.load('qt_' + QLocale.system().name(), QLibraryInfo.location(QLibraryInfo.TranslationsPath))
    app.installTranslator(translator)

    window = QMainWindow()

    assert(window.locale().language() == QLocale.Portuguese)
    textEditor = QPlainTextEdit(window)

    assert(textEditor.locale().language() == QLocale.Portuguese)
    window.setCentralWidget(textEditor)
    window.show()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

【讨论】:

虽然translator.load返回了True,这似乎表示语言已正确加载,但上下文菜单仍为英文:( 断言语句在这里没有意义:设置翻译器不会改变语言环境。 @danielbb。葡萄牙语的翻译文件似乎还没有完全移植到 qt5。如果您尝试使用 pyqt4,您将看到翻译按预期工作。 @ekhumoro 哦,好吧,你是对的。我尝试加载波兰语翻译文件并且它有效。我想我现在会在我的项目中跳过这个翻译。谢谢大家

以上是关于上下文菜单未使用 PyQt5 显示正确的语言的主要内容,如果未能解决你的问题,请参考以下文章

使用 PyQt5 创建上下文菜单

azure devops vsts 扩展动态上下文菜单,子菜单未正确加载

PyQt5:如何从系统托盘图标上下文菜单启动窗口?

对于 10.7 中的应用程序构建,10.5 中未显示上下文菜单

PyQt5不同方法创建菜单栏工具栏和状态栏

C# - 如何使用上下文菜单正确触发应用程序打开