上下文菜单未使用 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 显示正确的语言的主要内容,如果未能解决你的问题,请参考以下文章
azure devops vsts 扩展动态上下文菜单,子菜单未正确加载