Python 基于所选内容(而不是光标前的字符)格式化QTextEdit中的文本

Python 基于所选内容(而不是光标前的字符)格式化QTextEdit中的文本,python,qt,pyqt,qtextedit,Python,Qt,Pyqt,Qtextedit,我一直在组装一个基于Peter Goldsborough的文本编辑器,但针对Qt for Python的PyQt绑定进行了修改 在Goldsborough的代码中,有许多文本格式化方法遵循此模式: def bold(self): if self.text.fontWeight() == QtGui.QFont.Bold: self.text.setFontWeight(QtGui.QFont.Normal) else: self.text.set

我一直在组装一个基于Peter Goldsborough的文本编辑器,但针对Qt for Python的PyQt绑定进行了修改

在Goldsborough的代码中,有许多文本格式化方法遵循此模式:

 def bold(self):
    if self.text.fontWeight() == QtGui.QFont.Bold:
        self.text.setFontWeight(QtGui.QFont.Normal)
    else:
        self.text.setFontWeight(QtGui.QFont.Bold)
if/else应该检查当前选择的格式;如果它还不是该方法实现的格式,它会将其设置为该格式,否则,如果它已经是该格式,它会将其再次设置为正常格式。字处理器的典型可切换格式化行为

不幸的是,这个实现似乎没有做到这一点。
fontwweight()
方法检索QTextBrowser的“当前”格式,这意味着它将呈现新键入文本的格式-换句话说,从光标前的格式继续

这意味着会有一些不适合字处理器的奇怪行为:如果文本都是正常的,那么它会很好地更改格式,但是如果您更改文本内部段的格式,然后尝试将其更改回,那么文本将错误地保持在格式化状态


理想情况下,if/else应该对选择内容中的文本格式进行操作,而不是在选择内容之前进行操作。但我找不到一种方法可以做到这一点。我想我错过了一些重要的东西,谢谢你的建议

如果所选文本的格式不完全相同怎么办?结果是相同的行为。根据所选内容之前的字符是否具有特定的格式化属性,所有所选文本将分别设置为不具有该属性或具有该属性。不,我的意思是针对所需的行为。如果所选内容包含多种格式,您如何让if/else对“所选内容内的格式”进行操作?我可以想出许多方法-您可以对第一个字符进行操作,或者将所选内容内所需类型的任何格式检测为“格式化”,这与许多字处理器处理它的方式相同。但是,这些想法中的任何一个仍然需要能够处理选择中的字符,而不是在选择之前。如果所选文本的格式不完全相同,会发生什么呢?相同的行为结果。根据所选内容之前的字符是否具有特定的格式化属性,所有所选文本将分别设置为不具有该属性或具有该属性。不,我的意思是针对所需的行为。如果所选内容包含多种格式,您如何让if/else对“所选内容内的格式”进行操作?我可以想出许多方法-您可以对第一个字符进行操作,或者将所选内容内所需类型的任何格式检测为“格式化”,这与许多字处理器处理它的方式相同。但是这些想法中的任何一个仍然需要在选择中处理角色的能力,而不是仅仅在选择之前。