用python编写多行文本

2024-09-30 18:12:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在开发一个文本编辑器。留给我的唯一挑战是当文本宽度(写入)超过其最大大小(窗口)时,在下一行中写入文本。 任何帮助都将不胜感激。我有一个类照片查看器,可以控制文本字体、大小等等,谢谢提前

class PhotoViewer(QtWidgets.QGraphicsView):
    photoClicked = QtCore.pyqtSignal(QtCore.QPoint)

    def __init__(self, parent):
        super(PhotoViewer, self).__init__(parent)
        self._zoom = 0
        self._empty = True
        self._scene = QtWidgets.QGraphicsScene(self)
        self._photo = QtWidgets.QGraphicsPixmapItem()


        self._textLayer = QtWidgets.QGraphicsSimpleTextItem ()

        self._scene.addItem(self._photo)
        self._scene.addItem(self._textLayer)

        self.setScene(self._scene)
        self.setTransformationAnchor(QtWidgets.QGraphicsView.AnchorUnderMouse)
        self.setResizeAnchor(QtWidgets.QGraphicsView.AnchorUnderMouse)
        self.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
        self.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
        self.setBackgroundBrush(QtGui.QBrush(QtGui.QColor(80, 30, 30)))
        self.setFrameShape(QtWidgets.QFrame.NoFrame)
        self._textLayer.setFlags(QGraphicsItem.ItemIsMovable)


    def updateText(self,text,font_size=50):
        # Load the font:
        font_db = QFontDatabase()
        font_id = font_db.addApplicationFont("fonts/Summer's Victory Over Spring - TTF.ttf")
        #families = font_db.applicationFontFamilies(font_id)
        #print (families)

        myFont = QFont("Summers Victory Over Spring")
        myFont.setPixelSize(font_size*1.5)
        self._textLayer.setFont(myFont)
        self._textLayer.setText(text)



class Window(QtWidgets.QWidget):
    def __init__(self):
        super(Window, self).__init__()
        self.viewer = PhotoViewer(self)
        # 'Load image' button

        # Button to change from drag/pan to getting pixel info
        self.btnPixInfo = QtWidgets.QToolButton(self)
        self.btnPixInfo.setText('Create Text')
        self.btnPixInfo.clicked.connect(self.loadText)

        self.fontSize =QtWidgets.QSpinBox()
        self.fontSize.valueChanged.connect(self.loadText)

        self.editPixInfo = QtWidgets.QLineEdit(self)
        #self.editPixInfo.setReadOnly(True)
        self.viewer.photoClicked.connect(self.photoClicked)
        # Arrange layout
        VBlayout = QtWidgets.QVBoxLayout(self)
        HBlayout = QtWidgets.QHBoxLayout()
        HBlayout.setAlignment(QtCore.Qt.AlignLeft)

        HBlayout.addWidget(self.btnPixInfo)
        HBlayout.addWidget(self.editPixInfo)
        VBlayout.addLayout(HBlayout)
        VBlayout.addWidget(self.viewer)
        HBlayout.addWidget(self.fontSize)
        self.editPixInfo.setText("Sheeda")
        self.fontSize.setValue(20)

        self.loadText()
        self.frame = QFrame()
        self.frame.setFrameStyle(QFrame.StyledPanel)
        self.frame.setLineWidth(20)


    def loadText(self):
        #self.viewer.toggleDragMode()
        self.viewer.updateText(self.editPixInfo.text(),self.fontSize.value())

    def photoClicked(self, pos):
        if self.viewer.dragMode()  == QtWidgets.QGraphicsView.NoDrag:
            self.editPixInfo.setText('%d, %d' % (pos.x(), pos.y()))


if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    window = Window()
    window.setGeometry(500, 300, 800, 600)
    window.show()
    sys.exit(app.exec_())

这是我目前为止的代码。在


Tags: selfinitdefsceneviewerfontsettextfontsize
1条回答
网友
1楼 · 发布于 2024-09-30 18:12:35

我知道了,你用的是QGraphicsSimpleTextItem,最简单的办法就是使用QGraphicsTextItem。原因是,稍后提供了一个setTextWidth方法,defauls to-1。只需将此设置为您的“最大大小”限制。另外,您必须根据QGraphicsTextItem文档将“setText”调用更新为“setPlainText”调用。在

相关问题 更多 >