使用按钮将富文本添加到 QTextEdit
Add Rich Text into QTextEdit Using Buttons
在 PyQt5 中,我有一些创建按钮的代码。我还有一个 QTextEdit 小部件,我可以在其中键入文本。我想要的是每次单击按钮时,它允许我向 QTextEdit 添加粗体文本,如果我再次单击它,它会停止添加粗体文本。我该怎么做?
这是我的代码:
#Import Module
from PyQt5.QtGui import QFont
from PyQt5 import QtWidgets
from PyQt5 import QtCore
from PyQt5.QtCore import Qt
from PyQt5 import QtGui
import sys
class AddToDeckWindow(QtWidgets.QMainWindow):
def __init__(self):
super(AddToDeckWindow, self).__init__()
#Set The UI
self.initUI()
#Set The GUI Position And Size
self.setGeometry(200, 200, 900, 710)
#Set The GUI Title
self.setWindowTitle("Add")
#Set The GUI Icon
self.setWindowIcon(QtGui.QIcon('give_way.png'))
#Set The Translator
_translate = QtCore.QCoreApplication.translate
def initUI(self):
#Set Font For The Bold Label Button
boldFont = QFont()
boldFont.setFamily(u"Corbel")
boldFont.setPointSize(19)
boldFont.setBold(True)
boldFont.setWeight(75)
#Create The Bold Label Button
self.boldButton = QtWidgets.QLabel(self)
self.boldButton.setText("B")
self.boldButton.setFont(boldFont)
self.boldButton.adjustSize()
#Create The Text Box
textBox = QtWidgets.QTextEdit(self)
textBox.setGeometry(100, 100, 500, 200)
#Set The Font
font = QFont()
font.setPointSize(14)
textBox.setFont(font)
#Create A Windows
def window():
app = QtWidgets.QApplication(sys.argv)
win = AddToDeckWindow()
#Centers The Window On The Screen
qtRectangle = win.frameGeometry()
centerPoint = QtWidgets.QDesktopWidget().availableGeometry().center()
qtRectangle.moveCenter(centerPoint)
win.move(qtRectangle.topLeft())
win.show()
sys.exit(app.exec_())
window()
这是我将文本设置为粗体的尝试:
def textBoldAddToDeck(self, eve):
self.isBoldText = not self.isBoldText
if self.isBoldText == True:
self.editFrontTextAddMenu.insertHtml("<b>hi</b>")
elif self.isBoldText == False:
self.editFrontTextAddMenu.insertHtml("</b>")
print(self.isBoldText)
这是完整代码(我知道变量很长,我会尽快更改它们。):
#Import Module
from PyQt5.QtGui import QFont
from PyQt5 import QtWidgets
from PyQt5 import QtCore
from PyQt5.QtCore import Qt
from PyQt5 import QtGui
import sys
class AddToDeckWindow(QtWidgets.QMainWindow):
def __init__(self):
super(AddToDeckWindow, self).__init__()
#Set The UI
self.initUI()
#Set The GUI Position And Size
self.setGeometry(200, 200, 1200, 946)
#Set The GUI Title
self.setWindowTitle("Add")
#Set The GUI Icon
self.setWindowIcon(QtGui.QIcon('MainFlashcardAppIcon.png'))
#Set The Translator
_translate = QtCore.QCoreApplication.translate
def initUI(self):
widAddToDeckWindow = QtWidgets.QWidget(self)
self.setCentralWidget(widAddToDeckWindow)
###DEFINE IS BOLD VARIABLE###
self.isBoldText = False
#Create A Label
self.typeLabelAddMenu = QtWidgets.QLabel(self)
self.typeLabelAddMenu.setText("Type")
font_typeLabelAddMenu = QFont()
font_typeLabelAddMenu.setPointSize(9)
self.typeLabelAddMenu.setFont(font_typeLabelAddMenu)
self.typeLabelAddMenu.adjustSize()
self.typeButtonAddMenu = QtWidgets.QPushButton(self)
self.typeButtonAddMenu.setText("Basic")
#self.typeButtonAddMenu.setStyleSheet("background-color: red")
self.deckLabelAddMenu = QtWidgets.QLabel(self)
self.deckLabelAddMenu.setText("Deck")
self.deckLabelAddMenu.setFont(font_typeLabelAddMenu)
self.deckLabelAddMenu.adjustSize()
self.deckButtonAddMenu = QtWidgets.QPushButton(self)
self.deckButtonAddMenu.setText("Default")
vboxAddToDeckWindow_Main = QtWidgets.QVBoxLayout(self)
hboxAddToDeckWindow_top = QtWidgets.QHBoxLayout()
hboxAddToDeckWindow_top.setSpacing(27)
hboxAddToDeckWindow_top.addWidget(self.typeLabelAddMenu)
hboxAddToDeckWindow_top.addWidget(self.typeButtonAddMenu, 1)
hboxAddToDeckWindow_top.addWidget(self.deckLabelAddMenu)
hboxAddToDeckWindow_top.addWidget(self.deckButtonAddMenu, 1)
hboxAddToDeckWindow_top.setAlignment(Qt.AlignTop)
font_typeButtonAddMenu_setFont = QFont()
font_typeButtonAddMenu_setFont.setPointSize(10)
self.fieldButtonAddMenu_font = QtWidgets.QToolButton(self)
self.fieldButtonAddMenu_font.setText("Fields...")
self.fieldButtonAddMenu_font.setFont(font_typeButtonAddMenu_setFont)
self.cardsButtonAddMenu_font = QtWidgets.QToolButton(self)
self.cardsButtonAddMenu_font.setText("Cards...")
self.cardsButtonAddMenu_font.setFont(font_typeButtonAddMenu_setFont)
#Set Font For The Bold Label Button
fontAddToDeckBold_setFont = QFont()
fontAddToDeckBold_setFont.setFamily(u"Corbel")
fontAddToDeckBold_setFont.setPointSize(19)
fontAddToDeckBold_setFont.setBold(True)
fontAddToDeckBold_setFont.setWeight(75)
#Create The Bold Label Button
self.textBoldButtonAddMenu_font = QtWidgets.QLabel(self)
self.textBoldButtonAddMenu_font.setText("B")
self.textBoldButtonAddMenu_font.setFont(fontAddToDeckBold_setFont)
#self.textBoldButtonAddMenu_font.mousePressEvent = self.textBoldAddToDeck ##### CALL THE TEXT BOLD FUNCTION
#Set Font For The Itallic Label Button
fontAddToDeckItallic_setFont = QFont()
fontAddToDeckItallic_setFont.setFamily(u"Corbel")
fontAddToDeckItallic_setFont.setPointSize(19)
fontAddToDeckItallic_setFont.setItalic(True)
fontAddToDeckItallic_setFont.setBold(True)
fontAddToDeckItallic_setFont.setWeight(75)
#Create The Itallic Label Button
self.textItallicButtonAddMenu_font = QtWidgets.QLabel(self)
self.textItallicButtonAddMenu_font.setText("I")
self.textItallicButtonAddMenu_font.setFont(fontAddToDeckItallic_setFont)
#Set Font For The Underline Label Button
fontAddToDeckUnderline_setFont = QFont()
fontAddToDeckUnderline_setFont.setFamily(u"Corbel")
fontAddToDeckUnderline_setFont.setPointSize(19)
fontAddToDeckUnderline_setFont.setUnderline(True)
#Create The Underline Label Button
self.textUnderlineButtonAddMenu_font = QtWidgets.QLabel(self)
self.textUnderlineButtonAddMenu_font.setText("U")
self.textUnderlineButtonAddMenu_font.setFont(fontAddToDeckUnderline_setFont)
#Set Font For The Superscript Label Button
fontAddToDeckSuper_setFont = QFont()
fontAddToDeckSuper_setFont.setFamily(u"Corbel")
fontAddToDeckSuper_setFont.setPointSize(19)
#Create The Subscript Label Button
self.textSubButtonAddMenu_font = QtWidgets.QLabel(self)
self.textSubButtonAddMenu_font.setText("S<sub>2</sub>")
self.textSubButtonAddMenu_font.setFont(fontAddToDeckSuper_setFont)
#Create The Superscript Label Button
self.textSuperButtonAddMenu_font = QtWidgets.QLabel(self)
self.textSuperButtonAddMenu_font.setText("S<sup>2</sup>")
self.textSuperButtonAddMenu_font.setFont(fontAddToDeckSuper_setFont)
#Create The Remove Formatting Label Button
self.textRemoveFormatButtonAddMenu_font = QtWidgets.QLabel(self)
self.textRemoveFormatButtonAddMenu_font.setText("F<sub>x</sub>")
self.textRemoveFormatButtonAddMenu_font.setFont(fontAddToDeckSuper_setFont)
#Create The Set Colour Label Button
self.textSetColorButtonAddMenu_font = QtWidgets.QLabel(self)
self.textSetColorButtonAddMenu_font.setFont(fontAddToDeckSuper_setFont)
self.textSetColorButtonAddMenu_font.setStyleSheet(u"border :1px solid black;\n"
"border-radius: 15px;\n"
"background-color: rgb(0, 0, 0);")
self.textSetColorButtonAddMenu_font.setMinimumSize(QtCore.QSize(40, 40))
self.textSetColorButtonAddMenu_font.setMaximumSize(QtCore.QSize(40, 40))
#Create The Choose Colour Label Button
self.textChooseColorButtonAddMenu_font = QtWidgets.QLabel(self)
self.textChooseColorButtonAddMenu_font.setFont(fontAddToDeckSuper_setFont)
self.textChooseColorButtonAddMenu_font.setStyleSheet(u"border :1px solid black;\n"
"border-radius: 15px;\n"
"background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 rgba(255, 0, 0, 255), stop:0.166 rgba(255, 255, 0, 255), stop:0.333 rgba(0, 255, 0, 255), stop:0.5 rgba(0, 255, 255, 255), stop:0.666 rgba(0, 0, 255, 255), stop:0.833 rgba(255, 0, 255, 255), stop:1 rgba(255, 0, 0, 255));")
self.textChooseColorButtonAddMenu_font.setMinimumSize(QtCore.QSize(40, 40))
self.textChooseColorButtonAddMenu_font.setMaximumSize(QtCore.QSize(40, 40))
hboxAddToDeckWindow_setFont = QtWidgets.QHBoxLayout()
hboxAddToDeckWindow_setFont.setSpacing(16)
hboxAddToDeckWindow_setFont.addWidget(self.fieldButtonAddMenu_font)
hboxAddToDeckWindow_setFont.addWidget(self.cardsButtonAddMenu_font)
hboxAddToDeckWindow_setFont.addStretch()
hboxAddToDeckWindow_setFont.addWidget(self.textBoldButtonAddMenu_font)
hboxAddToDeckWindow_setFont.addWidget(self.textItallicButtonAddMenu_font)
hboxAddToDeckWindow_setFont.addWidget(self.textUnderlineButtonAddMenu_font)
hboxAddToDeckWindow_setFont.addWidget(self.textSubButtonAddMenu_font)
hboxAddToDeckWindow_setFont.addWidget(self.textSuperButtonAddMenu_font)
hboxAddToDeckWindow_setFont.addWidget(self.textRemoveFormatButtonAddMenu_font)
hboxAddToDeckWindow_setFont.addWidget(self.textSetColorButtonAddMenu_font)
hboxAddToDeckWindow_setFont.addWidget(self.textChooseColorButtonAddMenu_font)
hboxAddToDeckWindow_setFont.setAlignment(Qt.AlignTop)
self.editFrontTextAddMenu = QtWidgets.QTextEdit(self)
self.editFrontTextAddMenu.setMinimumSize(800, 50)
#Set The Font
editFrontTextAddMenu_font = QFont()
editFrontTextAddMenu_font.setPointSize(15)
self.editFrontTextAddMenu.setFont(editFrontTextAddMenu_font)
self.editBackTextAddMenu = QtWidgets.QTextEdit(self)
self.editBackTextAddMenu.setMinimumSize(800, 80)
#Set The Font
self.editBackTextAddMenu.setFont(editFrontTextAddMenu_font)
hboxAddToDeckWindow_editFrontText = QtWidgets.QGridLayout()
#Create A Label
self.FrontCardAddWindowLabel = QtWidgets.QLabel(self)
self.FrontCardAddWindowLabel.setText("Front")
self.FrontCardAddWindowLabel.setFont(font_typeLabelAddMenu)
self.FrontCardAddWindowLabel.adjustSize()
#Create A Label
self.BackCardAddWindowLabel = QtWidgets.QLabel(self)
self.BackCardAddWindowLabel.setText("Back")
self.BackCardAddWindowLabel.setFont(font_typeLabelAddMenu)
self.BackCardAddWindowLabel.adjustSize()
hboxAddToDeckWindow_editFrontText.addWidget(self.FrontCardAddWindowLabel, 1, 1)
hboxAddToDeckWindow_editFrontText.addWidget(self.editFrontTextAddMenu, 2, 1)
hboxAddToDeckWindow_editFrontText.addWidget(self.BackCardAddWindowLabel, 3, 1)
hboxAddToDeckWindow_editFrontText.addWidget(self.editBackTextAddMenu, 4, 1)
hboxAddToDeckWindow_editFrontText.setColumnStretch(1, 1)
#hboxAddToDeckWindow_editFrontText.setRowStretch(2, 1)
#hboxAddToDeckWindow_editFrontText.setRowStretch(14, 14)
#Add The Horizontal Layouts To A Main Vertical Layout
vboxAddToDeckWindow_Main.addLayout(hboxAddToDeckWindow_top)
vboxAddToDeckWindow_Main.addLayout(hboxAddToDeckWindow_setFont)
vboxAddToDeckWindow_Main.addLayout(hboxAddToDeckWindow_editFrontText)
vboxAddToDeckWindow_Main.addStretch()
widAddToDeckWindow.setLayout(vboxAddToDeckWindow_Main)
def textBoldAddToDeck(self, eve):
self.isBoldText = not self.isBoldText
if self.isBoldText == True:
self.editFrontTextAddMenu.insertHtml("<b>")
elif self.isBoldText == False:
self.editFrontTextAddMenu.insertHtml("</b>")
print(self.isBoldText)
#Create A Windows
def window():
app = QtWidgets.QApplication(sys.argv)
win = AddToDeckWindow()
#Centers The Window On The Screen
qtRectangle = win.frameGeometry()
centerPoint = QtWidgets.QDesktopWidget().availableGeometry().center()
qtRectangle.moveCenter(centerPoint)
win.move(qtRectangle.topLeft())
win.show()
sys.exit(app.exec_())
window()
然而,它没有用。谁能帮帮我
需要记住的重要一点是,Qt 的富文本功能是部分有限的,它们不符合完整 HTML标准。
使用 setHtml()
或 insertHtml()
并不完全 set/append 与参数中使用的 html 完全相同。给定的 html 被解析为符合 Qt 的富文本段,然后合并到底层 QTextDocument。
如果您尝试打印 toHtml()
的输出,结果很清楚,这将与您使用的不一样。这是附加粗体文本之前 toHtml()
的输出(我跳过了 headers):
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;
-qt-block-indent:0; text-indent:0px;">not bold</p>
这是使用 insertHtml("<b>bold</b>")
后的结果:
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;
-qt-block-indent:0; text-indent:0px;">not bold</p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;
-qt-block-indent:0; text-indent:0px;">
<span style=" font-weight:600;">bold</span></p>
如您所见,没有 <b>
标记的踪迹,而是转换为 <span>
。
在你的例子中,一个简单的 <b>
被忽略了,因为它没有有效的内容:虽然 Qt 足够聪明,可以关闭已经打开的标签,但没有文本,所以实际上没有向文档中添加任何内容。
正确的解决方案其实更简单,因为QTextEdit已经提供了一些函数来改变当前光标位置的格式(如Using QTextEdit as an Editor section of the documentation), including setFontWeight()
:
中所解释的)
if self.isBoldText == True:
self.editFrontTextAddMenu.setFontWeight(QtGui.QFont.Bold)
elif self.isBoldText == False:
self.editFrontTextAddMenu.setFontWeight(QtGui.QFont.Normal)
在 PyQt5 中,我有一些创建按钮的代码。我还有一个 QTextEdit 小部件,我可以在其中键入文本。我想要的是每次单击按钮时,它允许我向 QTextEdit 添加粗体文本,如果我再次单击它,它会停止添加粗体文本。我该怎么做?
这是我的代码:
#Import Module
from PyQt5.QtGui import QFont
from PyQt5 import QtWidgets
from PyQt5 import QtCore
from PyQt5.QtCore import Qt
from PyQt5 import QtGui
import sys
class AddToDeckWindow(QtWidgets.QMainWindow):
def __init__(self):
super(AddToDeckWindow, self).__init__()
#Set The UI
self.initUI()
#Set The GUI Position And Size
self.setGeometry(200, 200, 900, 710)
#Set The GUI Title
self.setWindowTitle("Add")
#Set The GUI Icon
self.setWindowIcon(QtGui.QIcon('give_way.png'))
#Set The Translator
_translate = QtCore.QCoreApplication.translate
def initUI(self):
#Set Font For The Bold Label Button
boldFont = QFont()
boldFont.setFamily(u"Corbel")
boldFont.setPointSize(19)
boldFont.setBold(True)
boldFont.setWeight(75)
#Create The Bold Label Button
self.boldButton = QtWidgets.QLabel(self)
self.boldButton.setText("B")
self.boldButton.setFont(boldFont)
self.boldButton.adjustSize()
#Create The Text Box
textBox = QtWidgets.QTextEdit(self)
textBox.setGeometry(100, 100, 500, 200)
#Set The Font
font = QFont()
font.setPointSize(14)
textBox.setFont(font)
#Create A Windows
def window():
app = QtWidgets.QApplication(sys.argv)
win = AddToDeckWindow()
#Centers The Window On The Screen
qtRectangle = win.frameGeometry()
centerPoint = QtWidgets.QDesktopWidget().availableGeometry().center()
qtRectangle.moveCenter(centerPoint)
win.move(qtRectangle.topLeft())
win.show()
sys.exit(app.exec_())
window()
这是我将文本设置为粗体的尝试:
def textBoldAddToDeck(self, eve):
self.isBoldText = not self.isBoldText
if self.isBoldText == True:
self.editFrontTextAddMenu.insertHtml("<b>hi</b>")
elif self.isBoldText == False:
self.editFrontTextAddMenu.insertHtml("</b>")
print(self.isBoldText)
这是完整代码(我知道变量很长,我会尽快更改它们。):
#Import Module
from PyQt5.QtGui import QFont
from PyQt5 import QtWidgets
from PyQt5 import QtCore
from PyQt5.QtCore import Qt
from PyQt5 import QtGui
import sys
class AddToDeckWindow(QtWidgets.QMainWindow):
def __init__(self):
super(AddToDeckWindow, self).__init__()
#Set The UI
self.initUI()
#Set The GUI Position And Size
self.setGeometry(200, 200, 1200, 946)
#Set The GUI Title
self.setWindowTitle("Add")
#Set The GUI Icon
self.setWindowIcon(QtGui.QIcon('MainFlashcardAppIcon.png'))
#Set The Translator
_translate = QtCore.QCoreApplication.translate
def initUI(self):
widAddToDeckWindow = QtWidgets.QWidget(self)
self.setCentralWidget(widAddToDeckWindow)
###DEFINE IS BOLD VARIABLE###
self.isBoldText = False
#Create A Label
self.typeLabelAddMenu = QtWidgets.QLabel(self)
self.typeLabelAddMenu.setText("Type")
font_typeLabelAddMenu = QFont()
font_typeLabelAddMenu.setPointSize(9)
self.typeLabelAddMenu.setFont(font_typeLabelAddMenu)
self.typeLabelAddMenu.adjustSize()
self.typeButtonAddMenu = QtWidgets.QPushButton(self)
self.typeButtonAddMenu.setText("Basic")
#self.typeButtonAddMenu.setStyleSheet("background-color: red")
self.deckLabelAddMenu = QtWidgets.QLabel(self)
self.deckLabelAddMenu.setText("Deck")
self.deckLabelAddMenu.setFont(font_typeLabelAddMenu)
self.deckLabelAddMenu.adjustSize()
self.deckButtonAddMenu = QtWidgets.QPushButton(self)
self.deckButtonAddMenu.setText("Default")
vboxAddToDeckWindow_Main = QtWidgets.QVBoxLayout(self)
hboxAddToDeckWindow_top = QtWidgets.QHBoxLayout()
hboxAddToDeckWindow_top.setSpacing(27)
hboxAddToDeckWindow_top.addWidget(self.typeLabelAddMenu)
hboxAddToDeckWindow_top.addWidget(self.typeButtonAddMenu, 1)
hboxAddToDeckWindow_top.addWidget(self.deckLabelAddMenu)
hboxAddToDeckWindow_top.addWidget(self.deckButtonAddMenu, 1)
hboxAddToDeckWindow_top.setAlignment(Qt.AlignTop)
font_typeButtonAddMenu_setFont = QFont()
font_typeButtonAddMenu_setFont.setPointSize(10)
self.fieldButtonAddMenu_font = QtWidgets.QToolButton(self)
self.fieldButtonAddMenu_font.setText("Fields...")
self.fieldButtonAddMenu_font.setFont(font_typeButtonAddMenu_setFont)
self.cardsButtonAddMenu_font = QtWidgets.QToolButton(self)
self.cardsButtonAddMenu_font.setText("Cards...")
self.cardsButtonAddMenu_font.setFont(font_typeButtonAddMenu_setFont)
#Set Font For The Bold Label Button
fontAddToDeckBold_setFont = QFont()
fontAddToDeckBold_setFont.setFamily(u"Corbel")
fontAddToDeckBold_setFont.setPointSize(19)
fontAddToDeckBold_setFont.setBold(True)
fontAddToDeckBold_setFont.setWeight(75)
#Create The Bold Label Button
self.textBoldButtonAddMenu_font = QtWidgets.QLabel(self)
self.textBoldButtonAddMenu_font.setText("B")
self.textBoldButtonAddMenu_font.setFont(fontAddToDeckBold_setFont)
#self.textBoldButtonAddMenu_font.mousePressEvent = self.textBoldAddToDeck ##### CALL THE TEXT BOLD FUNCTION
#Set Font For The Itallic Label Button
fontAddToDeckItallic_setFont = QFont()
fontAddToDeckItallic_setFont.setFamily(u"Corbel")
fontAddToDeckItallic_setFont.setPointSize(19)
fontAddToDeckItallic_setFont.setItalic(True)
fontAddToDeckItallic_setFont.setBold(True)
fontAddToDeckItallic_setFont.setWeight(75)
#Create The Itallic Label Button
self.textItallicButtonAddMenu_font = QtWidgets.QLabel(self)
self.textItallicButtonAddMenu_font.setText("I")
self.textItallicButtonAddMenu_font.setFont(fontAddToDeckItallic_setFont)
#Set Font For The Underline Label Button
fontAddToDeckUnderline_setFont = QFont()
fontAddToDeckUnderline_setFont.setFamily(u"Corbel")
fontAddToDeckUnderline_setFont.setPointSize(19)
fontAddToDeckUnderline_setFont.setUnderline(True)
#Create The Underline Label Button
self.textUnderlineButtonAddMenu_font = QtWidgets.QLabel(self)
self.textUnderlineButtonAddMenu_font.setText("U")
self.textUnderlineButtonAddMenu_font.setFont(fontAddToDeckUnderline_setFont)
#Set Font For The Superscript Label Button
fontAddToDeckSuper_setFont = QFont()
fontAddToDeckSuper_setFont.setFamily(u"Corbel")
fontAddToDeckSuper_setFont.setPointSize(19)
#Create The Subscript Label Button
self.textSubButtonAddMenu_font = QtWidgets.QLabel(self)
self.textSubButtonAddMenu_font.setText("S<sub>2</sub>")
self.textSubButtonAddMenu_font.setFont(fontAddToDeckSuper_setFont)
#Create The Superscript Label Button
self.textSuperButtonAddMenu_font = QtWidgets.QLabel(self)
self.textSuperButtonAddMenu_font.setText("S<sup>2</sup>")
self.textSuperButtonAddMenu_font.setFont(fontAddToDeckSuper_setFont)
#Create The Remove Formatting Label Button
self.textRemoveFormatButtonAddMenu_font = QtWidgets.QLabel(self)
self.textRemoveFormatButtonAddMenu_font.setText("F<sub>x</sub>")
self.textRemoveFormatButtonAddMenu_font.setFont(fontAddToDeckSuper_setFont)
#Create The Set Colour Label Button
self.textSetColorButtonAddMenu_font = QtWidgets.QLabel(self)
self.textSetColorButtonAddMenu_font.setFont(fontAddToDeckSuper_setFont)
self.textSetColorButtonAddMenu_font.setStyleSheet(u"border :1px solid black;\n"
"border-radius: 15px;\n"
"background-color: rgb(0, 0, 0);")
self.textSetColorButtonAddMenu_font.setMinimumSize(QtCore.QSize(40, 40))
self.textSetColorButtonAddMenu_font.setMaximumSize(QtCore.QSize(40, 40))
#Create The Choose Colour Label Button
self.textChooseColorButtonAddMenu_font = QtWidgets.QLabel(self)
self.textChooseColorButtonAddMenu_font.setFont(fontAddToDeckSuper_setFont)
self.textChooseColorButtonAddMenu_font.setStyleSheet(u"border :1px solid black;\n"
"border-radius: 15px;\n"
"background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 rgba(255, 0, 0, 255), stop:0.166 rgba(255, 255, 0, 255), stop:0.333 rgba(0, 255, 0, 255), stop:0.5 rgba(0, 255, 255, 255), stop:0.666 rgba(0, 0, 255, 255), stop:0.833 rgba(255, 0, 255, 255), stop:1 rgba(255, 0, 0, 255));")
self.textChooseColorButtonAddMenu_font.setMinimumSize(QtCore.QSize(40, 40))
self.textChooseColorButtonAddMenu_font.setMaximumSize(QtCore.QSize(40, 40))
hboxAddToDeckWindow_setFont = QtWidgets.QHBoxLayout()
hboxAddToDeckWindow_setFont.setSpacing(16)
hboxAddToDeckWindow_setFont.addWidget(self.fieldButtonAddMenu_font)
hboxAddToDeckWindow_setFont.addWidget(self.cardsButtonAddMenu_font)
hboxAddToDeckWindow_setFont.addStretch()
hboxAddToDeckWindow_setFont.addWidget(self.textBoldButtonAddMenu_font)
hboxAddToDeckWindow_setFont.addWidget(self.textItallicButtonAddMenu_font)
hboxAddToDeckWindow_setFont.addWidget(self.textUnderlineButtonAddMenu_font)
hboxAddToDeckWindow_setFont.addWidget(self.textSubButtonAddMenu_font)
hboxAddToDeckWindow_setFont.addWidget(self.textSuperButtonAddMenu_font)
hboxAddToDeckWindow_setFont.addWidget(self.textRemoveFormatButtonAddMenu_font)
hboxAddToDeckWindow_setFont.addWidget(self.textSetColorButtonAddMenu_font)
hboxAddToDeckWindow_setFont.addWidget(self.textChooseColorButtonAddMenu_font)
hboxAddToDeckWindow_setFont.setAlignment(Qt.AlignTop)
self.editFrontTextAddMenu = QtWidgets.QTextEdit(self)
self.editFrontTextAddMenu.setMinimumSize(800, 50)
#Set The Font
editFrontTextAddMenu_font = QFont()
editFrontTextAddMenu_font.setPointSize(15)
self.editFrontTextAddMenu.setFont(editFrontTextAddMenu_font)
self.editBackTextAddMenu = QtWidgets.QTextEdit(self)
self.editBackTextAddMenu.setMinimumSize(800, 80)
#Set The Font
self.editBackTextAddMenu.setFont(editFrontTextAddMenu_font)
hboxAddToDeckWindow_editFrontText = QtWidgets.QGridLayout()
#Create A Label
self.FrontCardAddWindowLabel = QtWidgets.QLabel(self)
self.FrontCardAddWindowLabel.setText("Front")
self.FrontCardAddWindowLabel.setFont(font_typeLabelAddMenu)
self.FrontCardAddWindowLabel.adjustSize()
#Create A Label
self.BackCardAddWindowLabel = QtWidgets.QLabel(self)
self.BackCardAddWindowLabel.setText("Back")
self.BackCardAddWindowLabel.setFont(font_typeLabelAddMenu)
self.BackCardAddWindowLabel.adjustSize()
hboxAddToDeckWindow_editFrontText.addWidget(self.FrontCardAddWindowLabel, 1, 1)
hboxAddToDeckWindow_editFrontText.addWidget(self.editFrontTextAddMenu, 2, 1)
hboxAddToDeckWindow_editFrontText.addWidget(self.BackCardAddWindowLabel, 3, 1)
hboxAddToDeckWindow_editFrontText.addWidget(self.editBackTextAddMenu, 4, 1)
hboxAddToDeckWindow_editFrontText.setColumnStretch(1, 1)
#hboxAddToDeckWindow_editFrontText.setRowStretch(2, 1)
#hboxAddToDeckWindow_editFrontText.setRowStretch(14, 14)
#Add The Horizontal Layouts To A Main Vertical Layout
vboxAddToDeckWindow_Main.addLayout(hboxAddToDeckWindow_top)
vboxAddToDeckWindow_Main.addLayout(hboxAddToDeckWindow_setFont)
vboxAddToDeckWindow_Main.addLayout(hboxAddToDeckWindow_editFrontText)
vboxAddToDeckWindow_Main.addStretch()
widAddToDeckWindow.setLayout(vboxAddToDeckWindow_Main)
def textBoldAddToDeck(self, eve):
self.isBoldText = not self.isBoldText
if self.isBoldText == True:
self.editFrontTextAddMenu.insertHtml("<b>")
elif self.isBoldText == False:
self.editFrontTextAddMenu.insertHtml("</b>")
print(self.isBoldText)
#Create A Windows
def window():
app = QtWidgets.QApplication(sys.argv)
win = AddToDeckWindow()
#Centers The Window On The Screen
qtRectangle = win.frameGeometry()
centerPoint = QtWidgets.QDesktopWidget().availableGeometry().center()
qtRectangle.moveCenter(centerPoint)
win.move(qtRectangle.topLeft())
win.show()
sys.exit(app.exec_())
window()
然而,它没有用。谁能帮帮我
需要记住的重要一点是,Qt 的富文本功能是部分有限的,它们不符合完整 HTML标准。
使用 setHtml()
或 insertHtml()
并不完全 set/append 与参数中使用的 html 完全相同。给定的 html 被解析为符合 Qt 的富文本段,然后合并到底层 QTextDocument。
如果您尝试打印 toHtml()
的输出,结果很清楚,这将与您使用的不一样。这是附加粗体文本之前 toHtml()
的输出(我跳过了 headers):
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;
-qt-block-indent:0; text-indent:0px;">not bold</p>
这是使用 insertHtml("<b>bold</b>")
后的结果:
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;
-qt-block-indent:0; text-indent:0px;">not bold</p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;
-qt-block-indent:0; text-indent:0px;">
<span style=" font-weight:600;">bold</span></p>
如您所见,没有 <b>
标记的踪迹,而是转换为 <span>
。
在你的例子中,一个简单的 <b>
被忽略了,因为它没有有效的内容:虽然 Qt 足够聪明,可以关闭已经打开的标签,但没有文本,所以实际上没有向文档中添加任何内容。
正确的解决方案其实更简单,因为QTextEdit已经提供了一些函数来改变当前光标位置的格式(如Using QTextEdit as an Editor section of the documentation), including setFontWeight()
:
if self.isBoldText == True:
self.editFrontTextAddMenu.setFontWeight(QtGui.QFont.Bold)
elif self.isBoldText == False:
self.editFrontTextAddMenu.setFontWeight(QtGui.QFont.Normal)