如何解决如何在QTextDocument中更改图像的字体和大小?
我想打印一些由qtdesigner设计的文本和图像。
如何更改QTextDocument
中的字体和其他格式?
from PyQt5 import QtCore,QtGui,QtWidgets,QtPrintSupport
class Ui_MainWindow(object):
def handlePrint(self):
dialog = QtPrintSupport.QPrintDialog()
if dialog.exec_() == QtWidgets.QDialog.Accepted:
self.handlePaintRequest(dialog.printer())
def handlePreview(self):
dialog = QtPrintSupport.QPrintPreviewDialog()
dialog.paintRequested.connect(self.handlePaintRequest)
dialog.exec_()
def handlePaintRequest(self,printer):
document = QtGui.QTextDocument()
cursor = QtGui.QTextCursor(document)
cursor.insertImage('logo4.jpg')
cursor.insertBlock()
cursor.insertText('MY TEXT')
document.print_(printer)
def setupUi(self,MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800,600)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.pushButton_print_previw = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_print_previw.setGeometry(QtCore.QRect(90,270,251,91))
font = QtGui.QFont()
font.setPointSize(15)
self.pushButton_print_previw.setFont(font)
self.pushButton_print_previw.setObjectName("pushButton_print_previw")
self.pushButton_print = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_print.setGeometry(QtCore.QRect(440,91))
font = QtGui.QFont()
font.setPointSize(15)
self.pushButton_print.setFont(font)
self.pushButton_print.setObjectName("pushButton_print")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0,800,26))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
############################################################
self.pushButton_print_previw.clicked.connect(self.handlePreview)
############################################################
############################################################
self.pushButton_print.clicked.connect(self.handlePrint)
############################################################
def retranslateUi(self,MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow","MainWindow"))
self.pushButton_print_previw.setText(_translate("MainWindow","Print Preview"))
self.pushButton_print.setText(_translate("MainWindow","Print"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
解决方法
pls使用代码并应用您的程序。我没有申请您的程序,因为您使用过qt designer .. QTDESİGNER是一种不良做法。文本光标和文本文档将pyqt4更改为pyqt5,这不是解决您的代码,而是有用的代码,但是...... p
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class Pencere(QWidget):
def __init__(self):
super().__init__()
self.setUI()
def setUI(self):
self.label = QLabel("label")
button = QPushButton("write font type")
v_box = QVBoxLayout()
v_box.addWidget(self.label)
v_box.addWidget(button)
button.clicked.connect(self.changedfont)
self.setLayout(v_box)
self.setWindowTitle("QFontDialog")
self.show()
def changedfont(self):
getQFontobject,state = QFontDialog.getFont()
if state:
self.label.setFont(getQFontobject)
if __name__ == "__main__":
app = QApplication(sys.argv)
pencere = Pencere()
sys.exit(app.exec())
和
其他链接是有用的: Qt4/PyQt4 - Can not set the default font for QTextDocument
https://doc.qt.io/qt-5/qtextdocument.html#setDefaultFont https://doc.qt.io/archives/qt-4.8/qtextdocument.html
并且我不能解决AttributeError:'Ui_MainWindow'对象没有属性'document',但是您可以更改代码...
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5 import QtCore,QtGui,QtWidgets,QtPrintSupport
class Ui_MainWindow(object):
def handlePrint(self):
dialog = QtPrintSupport.QPrintDialog()
if dialog.exec_() == QtWidgets.QDialog.Accepted:
self.handlePaintRequest(dialog.printer())
def handlePreview(self):
dialog = QtPrintSupport.QPrintPreviewDialog()
dialog.paintRequested.connect(self.handlePaintRequest)
dialog.exec_()
def handlePaintRequest(self,printer):
self.document = QtGui.QTextDocument()
self.cursor = QtGui.QTextCursor(self.document)
#self.cursor.insertImage('logo4.jpg')
self.cursor.insertBlock()
self.cursor.insertText('MY TEXT')
self.document.print_(printer)
# mycode mycode :)
def changedfont(self):
getQFontobject,state = QFontDialog.getFont()
if state:
#c_format = QtGui.QTextCharFormat()
#c_format.setFont(getQFontobject)
self.document.setDefaultFont(getQFontobject)
#self.cursor.setCharFormat(c_format)
#cur.insertText('sample text')
#self.document.setDefaultFont(getQFontobject)
#self.document.setFont(getQFontobject)
def setupUi(self,MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800,600)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.pushButton_print_previw = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_print_previw.setGeometry(QtCore.QRect(90,270,251,91))
font = QtGui.QFont()
font.setPointSize(15)
self.pushButton_print_previw.setFont(font)
self.pushButton_print_previw.setObjectName("pushButton_print_previw")
self.pushButton_print = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_print.setGeometry(QtCore.QRect(440,91))
font = QtGui.QFont()
font.setPointSize(15)
self.pushButton_print.setFont(font)
self.pushButton_print.setObjectName("pushButton_print")
# mycode
self.pushButton_font = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_font.setObjectName("pushbutton_font")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0,800,26))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
############################################################
self.pushButton_print_previw.clicked.connect(self.handlePreview)
############################################################
############################################################
self.pushButton_print.clicked.connect(self.handlePrint)
############################################################
######### mycode #############
self.pushButton_font.clicked.connect(self.changedfont)
def retranslateUi(self,MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow","MainWindow"))
self.pushButton_print_previw.setText(_translate("MainWindow","Print Preview"))
self.pushButton_print.setText(_translate("MainWindow","Print"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
,
document.print_(printer)
很方便,但有点不灵活。
因为您不使用 QTextEdit
,所以您只能通过您的代码编辑格式信息。 (提前setHtml除外。)
如果您随意绘制 QPrinter
文档,则可以使用 QPainter
。
通常情况下,虽然QPainter
中使用了paintEvent(self,event)
,但只有将QPaintDevice
的子类设置为QPainter
的构造函数,才能随意绘制。
但您必须准确计算分配额。
QPrinter 是 QPaintDevice
的子类。
陷阱
QPainter.drawText
的左上角是 Text 的底线。
(x,y)→ 我的文字
这是代码。
# -*- coding: utf-8 -*-
from PyQt5 import QtCore,QtPrintSupport
class Ui_MainWindow(object):
def handlePrint(self):
dialog = QtPrintSupport.QPrintDialog()
if dialog.exec_() == QtWidgets.QDialog.Accepted:
self.handlePaintRequest(dialog.printer())
def handlePreview(self):
dialog = QtPrintSupport.QPrintPreviewDialog()
dialog.paintRequested.connect(self.handlePaintRequest)
dialog.exec_()
def handlePaintRequest(self,printer):
document = QtGui.QTextDocument()
# cursor = QtGui.QTextCursor(document)
# cursor.insertImage('logo4.jpg')
# cursor.insertBlock()
# cursor.insertText('MY TEXT')
# document.print_(printer)
documentRootFrameFormat = document.rootFrame().frameFormat()
documentLeftMargin = documentRootFrameFormat.leftMargin()
documentTopMargin = documentRootFrameFormat.topMargin()
drawn_im = QtGui.QImage("logo4.jpg")
drawn_im_height = drawn_im.height()
painter = QtGui.QPainter(printer)
painter.drawImage(documentLeftMargin,documentTopMargin,drawn_im)
painter_font = painter.font()
#you can set flag which font is used.
custom_font = QtGui.QFont("Segoe UI Light",18)
fontMetricsF = QtGui.QFontMetricsF(custom_font)
painter.save()
painter.setFont(custom_font)
height_fontMetricsF = fontMetricsF.height()
painter.drawText(documentLeftMargin,documentTopMargin + drawn_im_height + height_fontMetricsF,'MY TEXT')
painter.restore()
def setupUi(self,91))
font = QtGui.QFont()
font.setPointSize(15)
self.pushButton_print.setFont(font)
self.pushButton_print.setObjectName("pushButton_print")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0,26))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
############################################################
self.pushButton_print_previw.clicked.connect(self.handlePreview)
############################################################
############################################################
self.pushButton_print.clicked.connect(self.handlePrint)
############################################################
def retranslateUi(self,"Print"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
我的结果 MDN
如果要使用QTextCursor
,可以使用QTextCursor
的方法设置字体和格式。
您可以通过此代码获得类似的结果。 如果你不希望高度控制,我推荐这个。
其他解决方案
def handlePaintRequest(self,printer):
document = QtGui.QTextDocument()
cursor = QtGui.QTextCursor(document)
cursor.insertImage("logo4.jpg")
cursor.insertBlock()
charFormat = cursor.charFormat()
charFormat.setFont(QtGui.QFont("Segoe UI Light",18))
cursor.insertText('MY TEXT',charFormat)
document.print_(printer)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。