关于python:PySide中Qt.escape的替代品?

Alternatives to Qt.escape in PySide?

我正在将一些代码从pyqt移植到pyside,其中包括一个自行开发的XML导出器。代码中充满了这样的行:

1
Qt.escape(textNote)

这对我来说是新的。我的Pyqt书(Summerfield,2008年)写道:

The Qt.escape() function takes a QString and returns it with any XML
metacharacters properly escaped. And we...convert any
paragraph and line breaks in the notes to their Unicode equivalents.

但不幸的是,对于我从文本创建XML的目标,escape似乎不再使用了。

这个问题在我发现的两个来源进行了讨论:

http://qt project.org/wiki/transition_从_qt_4.x_到_qt5 f166611e9788f9dbdff69088d622663e

Automated porting from Qt 4 to Qt 5

不幸的是,他们都建议使用QString.toHtmlEscaped(),但这种方法似乎不存在于pyside中(实际上,qstring不是pyside词典的一部分)。

最后,在四年前,在一份bug报告中讨论到,似乎escape并不是他们打算在pyside中支持的东西:

After a discussion with other PySide developers, we decided not export
this function, the reasons are:

  • This function is part of QtGui, if we create a QtGui.Qt, this will cause some headaches with QtCore.Qt.
  • PyQt4 also didn't export this function.
  • There are functions in python std lib that you can use to achieve the same goals, like xml.sax.saxutils.escape().

So, I'll mark this bug as WONTFIX.

这似乎回答了我的问题,但它已经四岁了,我很好奇它是否仍然有效。也就是说,是否没有Pyside转义功能,那么最好的选择是转到saxutils?或者在Pyside是否有类似于toHtmlEscaped的解决方案,我忽略了?


每次你都会用

1
Qt.escape(yourText)

您可以使用

1
2
from xml.sax.saxutils import escape as escape
escape(yourText)

它有点不那么优雅,但很管用。Pyside开发人员对四年前的一个问题的最初反应是一致的。