QTranslator在QTextEdit的默认上下文菜单上

时间:2013-06-26 11:53:45

标签: python pyqt qt5 pyqt5

我在使用site-packages/PyQt5/translations文件夹中的qt_xx.qm的PyQt5中的QTextEdit,QPlainTextEdit和QTextBrowser的翻译默认上下文菜单时遇到问题。例如,它适用于QLineEdit(这是相同的上下文菜单)。怎么处理呢?

重现问题的代码:

# coding: utf-8

import sys

from PyQt5.QtCore import QLocale
from PyQt5.QtCore import QTranslator
from PyQt5.QtWidgets import QApplication
from PyQt5.QtWidgets import QMainWindow
from PyQt5.QtWidgets import QWidget
from PyQt5.QtWidgets import QLineEdit
from PyQt5.QtWidgets import QTextEdit
from PyQt5.QtWidgets import QVBoxLayout


class MainWindow(QMainWindow):
    def __init__(self, parent=None):
        super().__init__(parent)

        widget = QWidget()

        lineEdit = QLineEdit()
        textEdit = QTextEdit()

        vbox = QVBoxLayout(widget)
        vbox.addWidget(lineEdit)
        vbox.addWidget(textEdit)

        self.setCentralWidget(widget)


if __name__ == '__main__':

    app = QApplication(sys.argv)
    locale = QLocale.system().name()

    qtTranslator = QTranslator()
    if qtTranslator.load('C:/Python33/Lib/site-packages/PyQt5/translations/qt_' + locale):
        app.installTranslator(qtTranslator)

    mainWindow = MainWindow()
    mainWindow.show()
    app.exec_()

2 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,我尝试通过修改通过调用方法QTextEdit::createStandardContext创建的标准上下文菜单来解决问题,并且它确实有效。
这是代码:

void CWQTextEdit::contextMenuEvent(QContextMenuEvent *e)
{
    QMenu *menu = QTextEdit::createStandardContextMenu();
    if (menu == NULL)
        return QTextEdit::contextMenuEvent(e);

    QList<QAction*> actions = menu->actions();

    foreach (QAction *action, actions)
    {
       QString actionText = action->text();
       if (actionText.contains("Undo"))
       {
           actionText.replace("Undo", tr("Undo"));
           action->setText(actionText);
       }
       else if (actionText.contains("Redo"))
       {
           actionText.replace("Redo", tr("Redo"));
           action->setText(actionText);
       }
       else if (actionText.contains("Cu&t"))
       {
           actionText.replace("Cu&t", tr("Cut"));
           action->setText(actionText);
       }
       else if (actionText.contains("Copy"))
       {
           actionText.replace("Copy", tr("Copy"));
           action->setText(actionText);
       }
       else if (actionText.contains("Paste"))
       {
           actionText.replace("Paste", tr("Paste"));
           action->setText(actionText);
       }
       else if (actionText.contains("Delete"))
       {
           actionText.replace("Delete", tr("Delete"));
           action->setText(actionText);
       }
       else if (actionText.contains("Select All"))
       {
           actionText.replace("Select All", tr("Select All"));
           action->setText(actionText);
       }
    }

    menu->exec(e->globalPos());
}

答案 1 :(得分:0)

if __name__ == "__main__":
    app = QApplication(argv)
    translator = QtCore.QTranslator()
    translator.load("translations/qt_zh_CN.qm")
    app.installTranslator(translator)