1. 程式人生 > 其它 >6.11 QTextEdit多行文字框文字操作

6.11 QTextEdit多行文字框文字操作

一、QTextEdit多行文字框文字操作

  • QTextEdit可以通過游標來操作文字內容和格式等,QTextEdit也可以直接對大多數常見的功能直接設定。這節課就是通過QTextEdit直接操作文字,有自動化格式、換行模式、覆蓋模式等格式操作,還有顏色設定、字元格式、編輯效果等樣式操作。

1.程式碼

from PyQt5.Qt import *
import sys


class Text_Url(QTextEdit) :
    def mousePressEvent(self, QMouseEvent) :
        print(QMouseEvent.pos())
        link = self.anchorAt(QMouseEvent.pos())
        if len(link) > 0 :
            QDesktopServices.openUrl(QUrl(link))
        return super().mousePressEvent(QMouseEvent)


class Window(QWidget) :
    def __init__(self) :
        super().__init__()
        self.setWindowTitle("QTextEdit-多行文字框直接操作文字 - PyQt5中文網")
        self.resize(600, 500)
        self.func_list()

    def func_list(self) :
        self.func()

    def func(self) :
        self.qte = Text_Url('QTextEdit-多行文字框' * 5, self)
        self.qte.move(100, 100)
        self.qte.resize(250, 250)
        self.qte.setStyleSheet('background-color:green')
        self.qte.setFrameStyle(QFrame.Box | QFrame.Raised)
        self.qte.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
        self.qte.setHorizontalScrollBarPolicy(Qt.ScrollBarAsNeeded)
        self.qte.insertHtml("多行文字框" * 20 + "<a href='http://www.bl186.net' name='pyqt5'>PyQt5中文網</a>")

        self.btn = QPushButton('按  鈕', self)
        self.btn.move(120, 50)
        self.btn.resize(70, 30)
        self.btn.pressed.connect(self.text_cur)

    def text_cur(self) :

        # 1.自動化格式(以*作為觸發)
        # self.qte.setAutoFormatting(QTextEdit.AutoBulletList)

        # 2.換行模式設定
        # QTextEdit.NoWrap  # 不換行,超過寬度後會出現水平滾動條
        # QTextEdit.WidgetWidth  # 以控制元件寬度為標準,保持單詞完整性
        # QTextEdit.FixedColumnWidth  # 填充列寬度
        # QTextEdit.FixedPixelWidth  # 直接設定一行寬度為多少畫素
        self.qte.setLineWrapMode(QTextEdit.FixedPixelWidth)  # 設定軟換行
        self.qte.setLineWrapColumnOrWidth(100)  # 配合FixedPixelWidth和FixedColumnWidth

        # QTextOption.NoWrap
        # QTextOption.WordWrap  # 保持單詞完整性
        # QTextOption.ManualWrap
        # QTextOption.WrapAnywhere  # 在任意位置換行
        # QTextOption.WrapAtWordBoundaryOrAnywhere
        # self.qte.setWordWrapMode(QTextOption.WrapMode)  # 設定單詞換行模式

        # 3.設定覆蓋模式
        self.qte.setOverwriteMode(True) #輸入字元會把後面的字元覆蓋掉

        # 4.游標設定
        self.qte.setCursorWidth(10) #游標本身的寬度

        # 5.段落對其方式設定
        # Qt.AlignLeft
        # Qt.AlignRight
        # Qt.AlignCenter
        self.qte.setAlignment(Qt.AlignRight) #右對齊

        # 6.字型格式設定(字型樣式、字型尺寸、字型效果、統一設定)
        # QFontDialog.getFont()
        # self.qte.setFontFamily('站酷快樂體2016修訂版')
        # self.qte.setFontWeight(5)
        #
        # self.qte.setFontPointSize(30)
        #
        # self.qte.setFontUnderline(True)

        # font = QFont()
        # font.setFamily('站酷快樂體2016修訂版')
        # font.setOverline(True)
        # self.qte.setFont(font)

        # 顏色設定(文字顏色和背景顏色)
        self.qte.setTextBackgroundColor(QColor(100, 50, 50))
        self.qte.setTextColor(QColor(200, 10, 100))

        # 設定字元格式
        tcf = QTextCharFormat()
        tcf.setFontFamily('站酷快樂體2016修訂版')
        tcf.setFontPointSize(30)
        self.qte.setCurrentCharFormat(tcf)

        tcf2 = QTextCharFormat()
        tcf2.setFontUnderline(True) #下劃線
        # self.qte.setCurrentCharFormat(tcf2)
        self.qte.mergeCurrentCharFormat(tcf2)

        # 常用編輯操作
        # copy()
        # paste()
        # canPaste()
        # setUndoRedoEnabled()
        # redo()
        # undo()
        # selectAll()
        # find()

        self.qte.copy() #點選按鈕就複製了
        self.qte.paste() #已經複製過,點選按鈕就貼上了

        # QTextDocument.FindBackward  # 從後向前查詢
        # QTextDocument.FindCaseSensitively  # 區分大小寫操作
        # QTextDocument.FindWholeWords  # 匹配完整單詞
        self.qte.find('文字', QTextDocument.FindBackward)

        # 只讀設定
        self.qte.setReadOnly(True)

        # Tab控制
        self.qte.setTabChangesFocus(True)  #True就把tab鍵關閉功能了
        self.qte.setTabStopDistance(150)  # 點選按鈕之後會自動變化

        # 開啟超連結-重寫點選事件

        # 可用訊號
        # self.qte.textChanged()  # 文字內容改變時
        # self.qte.selectionChanged()  # 選中內容改變時
        # self.qte.cursorPositionChanged()  # 游標位置改變時
        # self.qte.currentCharFormatChanged()  # 當前字元發生改變時
        # self.qte.copyAvailable()  # 複製可用時
        # self.qte.redoAvailable()  # 重做可用時
        # self.qte.undoAvailable()  # 撤銷可用時

        self.qte.textChanged.connect(self.text_change) #連線對應的槽函式
        self.qte.copyAvailable.connect(self.copy_yes)

    def text_change(self) :
        print('文字內容改變時')

    def copy_yes(self, yes) :
        print('複製可用', yes)


if __name__ == '__main__' :
    app = QApplication(sys.argv)
    window = Window()

    window.show()
    sys.exit(app.exec_())