在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()
并不完全设置/追加参数中使用的确切html。给定的html被解析为符合Qt的富文本段,然后合并到底层的QTextDocument如果您尝试打印
toHtml()
的输出,结果很清楚,这将与您使用的不同。下面是在添加粗体文本之前toHtml()
的输出(我跳过了标题):下面是使用
insertHtml("<b>bold</b>")
之后的内容:如您所见,没有
<b>
标记的痕迹,而是转换为<span>
在您的例子中,发生的是一个简单的
<b>
被忽略,因为它没有有效的内容:虽然Qt足够聪明,可以关闭保持打开状态的标记,但是没有文本,因此实际上没有向文档添加任何内容正确的解决方案实际上更简单,因为QTextEdit已经提供了一些函数来更改当前光标位置的格式(如文档的Using QTextEdit as an Editor部分所述),包括^{} :
相关问题 更多 >
编程相关推荐