我试图将我的PyQt程序国际化。我加载自己的翻译没有问题,但我注意到文件对话框似乎仍然使用系统区域设置。诸如this之类的答案表明我应该能够通过安装Qt附带的翻译文件来翻译内置的Qt小部件。
我尝试加载Qt提供的德语翻译,但我的文件对话框仍以英文显示。这是否适用于QFileDialog
静态函数?难道我做错了什么?
from PyQt5 import QtCore, QtWidgets
class Window(QtWidgets.QWidget):
def __init__(self):
super(Window, self).__init__()
button = QtWidgets.QPushButton('Show dialog')
button.clicked.connect(self.showdialog)
layout = QtWidgets.QVBoxLayout(self)
layout.addWidget(button)
def showdialog(self):
QtWidgets.QFileDialog.getOpenFileName()
if __name__ == '__main__':
app = QtWidgets.QApplication([])
translator = QtCore.QTranslator()
if translator.load('qt_de', QtCore.QLibraryInfo.location(QtCore.QLibraryInfo.TranslationsPath)):
app.installTranslator(translator)
print 'qt translations installed'
win = Window()
win.show()
app.exec_()
答案 0 :(得分:-1)
深入研究文档,我发现了这一点:
默认情况下,如果平台将使用平台本机文件对话框 有一个。在这种情况下,否则将使用的小部件 构造对话框不会被实例化,所以相关的访问器 例如layout()和itemDelegate()将返回null。 你可以设置 DontUseNativeDialog选项确保基于小部件 将使用实现而不是本机对话框。
所以我猜本机对话框总是使用本机系统语言。我的例子可以通过强制Qt使用(丑陋的)非原生对话
来实现def showdialog(self):
dialog = QtWidgets.QFileDialog(self)
dialog.setOptions(QtWidgets.QFileDialog.DontUseNativeDialog)
dialog.exec_()