QPlainTextEdit繼承圖 :

QPlainTextEdit描述 :

它和QTextEdit 差不多(但是它不是繼承QTextEdit),但是它更適合大的文本! 具體差異看上面!
QTextEdit 是按照像素來滾動的,而QPlainTextEdit 是按照行來滾的,
證明如下:
from PyQt5.Qt import * #剛開始學習可以這樣一下導入 import sys class Window(QWidget): def __init__(self): super().__init__() self.setWindowTitle("QPlainTextEdit的學習") self.resize(500,500) self.set_ui() def set_ui(self): ############################QTextEdit 和 QPlainTextEdit的區別############################### plainTextEdit = QPlainTextEdit(self) # plainTextEdit = QTextEdit(self) # 可以看到半行的情況 ############################QTextEdit 和 QPlainTextEdit的區別############################### plainTextEdit.resize(300,300) plainTextEdit.move(100,100) if __name__ == '__main__': app =QApplication(sys.argv) window = Window() window.show() sys.exit(app.exec_())
QPlainTextEdit 更適合大文檔的處理 !
QTextEdit 主要是偏向於富文本,QPlainTextEdit 主要是進行純文本的處理!
QPlainTextEdit繼承:
它繼承於QAbstractScrollArea
QPlainTextEdit功能作用 :
QPlainTextEdit功能作用之構造函數:

from PyQt5.Qt import * #剛開始學習可以這樣一下導入 import sys class Window(QWidget): def __init__(self): super().__init__() self.setWindowTitle("QPlainTextEdit的學習") self.resize(500,500) self.set_ui() def set_ui(self): plainTextEdit = QPlainTextEdit(self) plainTextEdit.resize(300,300) plainTextEdit.move(100,100) if __name__ == '__main__': app =QApplication(sys.argv) window = Window() window.show() sys.exit(app.exec_())
QPlainTextEdit功能作用之占位提示文本:

from PyQt5.Qt import * #剛開始學習可以這樣一下導入 import sys class Window(QWidget): def __init__(self): super().__init__() self.setWindowTitle("QPlainTextEdit的學習") self.resize(500,500) self.set_ui() def set_ui(self): self.plainTextEdit = QPlainTextEdit(self) self.plainTextEdit.resize(300,300) self.plainTextEdit.move(100,100) self.test() def test(self): ############################占位提示文本############################### self.plainTextEdit.setPlaceholderText("請輸入你的個人信息") print(self.plainTextEdit.placeholderText()) pass ############################占位提示文本############################### if __name__ == '__main__': app =QApplication(sys.argv) window = Window() window.show() sys.exit(app.exec_())
QPlainTextEdit功能作用之只讀設置:

from PyQt5.Qt import * #剛開始學習可以這樣一下導入 import sys class Window(QWidget): def __init__(self): super().__init__() self.setWindowTitle("QPlainTextEdit的學習") self.resize(500,500) self.set_ui() def set_ui(self): self.plainTextEdit = QPlainTextEdit(self) self.plainTextEdit.resize(300,300) self.plainTextEdit.move(100,100) self.test() def test(self): ############################只讀設置############################### self.plainTextEdit.setReadOnly(True) print(self.plainTextEdit.isReadOnly()) ############################只讀設置############################### if __name__ == '__main__': app =QApplication(sys.argv) window = Window() window.show() sys.exit(app.exec_())
QPlainTextEdit功能作用之格式:

from PyQt5.Qt import * #剛開始學習可以這樣一下導入 import sys class Window(QWidget): def __init__(self): super().__init__() self.setWindowTitle("QPlainTextEdit的學習") self.resize(500,500) self.set_ui() def set_ui(self): self.plainTextEdit = QPlainTextEdit(self) self.plainTextEdit.resize(300,300) self.plainTextEdit.move(100,100) self.test() def test(self): ############################格式設置############################### textCharFormat = QTextCharFormat() ############################QtextCharFormat 的設置############################### textCharFormat.setFontUnderline(True) textCharFormat.setUnderlineColor(QColor(20,200,200)) ############################QtextCharFormat 的設置############################### self.plainTextEdit.setCurrentCharFormat(textCharFormat) ############################格式設置############################### if __name__ == '__main__': app =QApplication(sys.argv) window = Window() window.show() sys.exit(app.exec_())
QPlainTextEdit功能作用之軟換行模式:

from PyQt5.Qt import * #剛開始學習可以這樣一下導入 import sys class Window(QWidget): def __init__(self): super().__init__() self.setWindowTitle("QPlainTextEdit的學習") self.resize(500,500) self.set_ui() def set_ui(self): self.plainTextEdit = QPlainTextEdit(self) self.plainTextEdit.resize(300,300) self.plainTextEdit.move(100,100) self.test() def test(self): ############################自動換行############################### print(self.plainTextEdit.lineWrapMode()) #默認是軟換行 self.plainTextEdit.setLineWrapMode(0) # 改變它 #QPlainTextEdit.NoWrap ############################自動換行############################### if __name__ == '__main__': app =QApplication(sys.argv) window = Window() window.show() sys.exit(app.exec_())
QPlainTextEdit功能作用之覆蓋模式:

from PyQt5.Qt import * #剛開始學習可以這樣一下導入 import sys class Window(QWidget): def __init__(self): super().__init__() self.setWindowTitle("QPlainTextEdit的學習") self.resize(500,500) self.set_ui() def set_ui(self): self.plainTextEdit = QPlainTextEdit(self) self.plainTextEdit.resize(300,300) self.plainTextEdit.move(100,100) self.test() def test(self): ############################覆蓋模式############################### print(self.plainTextEdit.overwriteMode()) #默認是 False self.plainTextEdit.setOverwriteMode(True) # 改變它 #QPlainTextEdit.NoWrap ############################覆蓋模式############################### if __name__ == '__main__': app =QApplication(sys.argv) window = Window() window.show() sys.exit(app.exec_())
QPlainTextEdit功能作用之Tab控制:

from PyQt5.Qt import * #剛開始學習可以這樣一下導入 import sys class Window(QWidget): def __init__(self): super().__init__() self.setWindowTitle("QPlainTextEdit的學習") self.resize(500,500) self.set_ui() def set_ui(self): self.plainTextEdit = QPlainTextEdit(self) self.plainTextEdit.resize(300,300) self.plainTextEdit.move(100,100) self.test() btn = QPushButton(window) btn.setText("按鈕") btn.move(0,300) def test(self): ############################tab控制############################### self.plainTextEdit.setTabChangesFocus(True) self.plainTextEdit.setTabStopDistance(10) # 設置tab 的距離 ############################tab控制############################### if __name__ == '__main__': app =QApplication(sys.argv) window = Window() window.show() sys.exit(app.exec_())
QPlainTextEdit功能作用之文本操作:

它大部分都是支持PlainText 的 。
from PyQt5.Qt import * #剛開始學習可以這樣一下導入 import sys class Window(QWidget): def __init__(self): super().__init__() self.setWindowTitle("QPlainTextEdit的學習") self.resize(500,500) self.set_ui() def set_ui(self): self.plainTextEdit = QPlainTextEdit(self) self.plainTextEdit.resize(300,300) self.plainTextEdit.move(100,100) self.test() btn = QPushButton(self) btn.setText("按鈕") btn.move(0,300) def test(self): ############################文本操作############################### self.plainTextEdit.setPlainText("Hello world!") self.plainTextEdit.setPlainText("Python") self.plainTextEdit.insertPlainText("Life is short") self.plainTextEdit.appendPlainText("我去") self.plainTextEdit.appendHtml("<a href = 'http:www.python.io'>I learn Python</a>") # 但是並不是所有的html ,它都可以接收,它主要還是針對的是plainText #例如表格它就不能接受 tab_str =''' <table>\ <tr><td>1</td><td>2</td><td>3</td></tr>\ <tr><td>4</td><td>5</td><td>6</td></tr>\ </table>''' self.plainTextEdit.appendHtml(tab_str) # 這時不支持的 print(self.plainTextEdit.toPlainText()) # 獲取文本框中所有的純文本 ############################文本操作############################### if __name__ == '__main__': app =QApplication(sys.argv) window = Window() window.show() sys.exit(app.exec_())
QPlainTextEdit功能作用之塊操作:

from PyQt5.Qt import * #剛開始學習可以這樣一下導入 import sys class Window(QWidget): def __init__(self): super().__init__() self.setWindowTitle("QPlainTextEdit的學習") self.resize(500,500) self.set_ui() def set_ui(self): self.plainTextEdit = QPlainTextEdit(self) self.plainTextEdit.resize(300,300) self.plainTextEdit.move(100,100) self.test() btn = QPushButton(self) btn.setText("按鈕") btn.move(0,300) ############################塊操作############################### btn.clicked.connect(self.test) def test(self): print(self.plainTextEdit.blockCount()) # 當前的塊的個數 當前是1 它是個默認的空白的塊 # 塊是按換行符來分的 self.plainTextEdit.setMaximumBlockCount(3) # 多余的塊會被刪除 ############################塊操作############################### if __name__ == '__main__': app =QApplication(sys.argv) window = Window() window.show() sys.exit(app.exec_())
QPlainTextEdit功能作用之常用編輯操作:

它和QTextEdit 中的有很多都是重復的,二者區別主要是一個偏向於富文本,一個偏向於純文本!
我們在QTextEdit 沒有說兩個方法,一個放大一個縮小,這里統一說一下:
from PyQt5.Qt import * #剛開始學習可以這樣一下導入 import sys class Window(QWidget): def __init__(self): super().__init__() self.setWindowTitle("QPlainTextEdit的學習") self.resize(500,500) self.set_ui() def set_ui(self): self.plainTextEdit = QPlainTextEdit(self) self.plainTextEdit.resize(300,300) self.plainTextEdit.move(100,100) self.test() btn = QPushButton(self) btn.setText("按鈕") btn.move(0,300) ############################放大縮小############################### btn.clicked.connect(self.test) def test(self): self.plainTextEdit.zoomIn(10) self.plainTextEdit.zoomIn(-1) # self.plainTextEdit.zoomOut(10) # self.plainTextEdit.zoomOut(-1) #用上面的zoomIn 即可 ############################放大縮小############################### if __name__ == '__main__': app =QApplication(sys.argv) window = Window() window.show() sys.exit(app.exec_())
QPlainTextEdit功能作用之滾動:

這個滾動保證光標可見!
from PyQt5.Qt import * #剛開始學習可以這樣一下導入 import sys class Window(QWidget): def __init__(self): super().__init__() self.setWindowTitle("QPlainTextEdit的學習") self.resize(500,500) self.set_ui() def set_ui(self): self.plainTextEdit = QPlainTextEdit(self) self.plainTextEdit.resize(300,300) self.plainTextEdit.move(100,100) self.test() btn = QPushButton(self) btn.setText("按鈕") btn.move(0,300) ############################滾動保證光標可見############################### btn.clicked.connect(self.test) def test(self): ########################################################### # self.plainTextEdit.centerCursor() # 盡可能 保證光標所在行 在中間位置 # self.setFocus() # self.plainTextEdit.setCenterOnScroll(True) ########################################################### self.plainTextEdit.ensureCursorVisible() # 保證光標可見 而且是光標移動最小的距離 self.setFocus() ############################滾動保證光標可見############################### if __name__ == '__main__': app =QApplication(sys.argv) window = Window() window.show() sys.exit(app.exec_())
QPlainTextEdit功能作用之光標:
from PyQt5.Qt import * #剛開始學習可以這樣一下導入 import sys class Window(QWidget): def __init__(self): super().__init__() self.setWindowTitle("QPlainTextEdit的學習") self.resize(500,500) self.set_ui() def set_ui(self): self.plainTextEdit = QPlainTextEdit(self) self.plainTextEdit.resize(300,300) self.plainTextEdit.move(100,100) self.test() btn = QPushButton(self) btn.setText("按鈕") btn.move(0,300) ############################光標操作############################### btn.clicked.connect(self.test) def test(self): ########################################################### # print(self.plainTextEdit.textCursor()) #文本光標對象 # textCursor_obj = self.plainTextEdit.textCursor() # textCursor_obj.insertImage("icon/view.png") #這時不行,因為QPlainTextEdit 不支持富文本 # #用QTextEdit 就行了 # textCursor_obj.insertTable(5,3) # 插入表格 ############################指定位置的文本光標對象 ############################### # textCursor_obj = self.plainTextEdit.cursorForPosition(QPoint(100,60)) # print(textCursor_obj) # #可以通過它對任何位置的字符文本進行修改! # ############################指定位置的文本光標對象 ############################### ############################設置光標的寬度 ############################### ############################設置光標的寬度 ############################### ############################光標操作############################### if __name__ == '__main__': app =QApplication(sys.argv) window = Window() window.show() sys.exit(app.exec_())
QPlainTextEdit信號:

from PyQt5.Qt import * #剛開始學習可以這樣一下導入 import sys class Window(QWidget): def __init__(self): super().__init__() self.setWindowTitle("QPlainTextEdit的學習") self.resize(500,500) self.set_ui() def set_ui(self): self.plainTextEdit = QPlainTextEdit(self) self.plainTextEdit.resize(300,300) self.plainTextEdit.move(100,100) self.test() btn = QPushButton(self) btn.setText("按鈕") btn.move(0,300) # btn.clicked.connect(self.test) def test(self): ############################信號操作############################### # self.plainTextEdit.textChanged.connect(lambda :print("文本內容發生改變")) # self.plainTextEdit.selectionChanged.connect(lambda :print("選中的文本發生變化")) # 可以用光標對象獲取選中的文本 # self.plainTextEdit.selectionChanged.connect(lambda :print("選中的文本發生變化",self.plainTextEdit.textCursor().selectedText())) # self.plainTextEdit.modificationChanged.connect(lambda val :print("編輯狀態發生改變",val)) # 那么如何設置 編輯狀態呢? # # doc = self.plainTextEdit.document() # 拿到文本對象 # QTextDocument # doc.setModified(False) # 將其改為未編輯 #它的應用場景是 : 當用戶按下保存的時候就要將編輯狀態改變了 # self.plainTextEdit.cursorPositionChanged.connect(lambda :print("光標位置改變")) # self.plainTextEdit.blockCountChanged.connect(lambda val:print("塊的個數發生改變 ",val)) ############################信號操作############################### if __name__ == '__main__': app =QApplication(sys.argv) window = Window() window.show() sys.exit(app.exec_())
from PyQt5.Qt import * #剛開始學習可以這樣一下導入 import sys class Window(QWidget): def __init__(self): super().__init__() self.setWindowTitle("QPlainTextEdit的學習") self.resize(500,500) self.set_ui() def set_ui(self): self.plainTextEdit = QPlainTextEdit(self) self.plainTextEdit.resize(300,300) self.plainTextEdit.move(100,100) self.test() btn = QPushButton(self) btn.setText("按鈕") btn.move(0,300) # btn.clicked.connect(self.test) def test(self): ############################updateRequest信號操作############################### #內容更新時發出的信號 #它的用途是 當文本滾動時,行號也跟着進行滾動 self.plainTextEdit.updateRequest.connect(lambda rect,dy :print("內容區域更新",rect,dy)) # dy 是移動的位移 ############################updateRequest信號操作############################### if __name__ == '__main__': app =QApplication(sys.argv) window = Window() window.show() sys.exit(app.exec_())
案例:模擬行號

from PyQt5.Qt import * #剛開始學習可以這樣一下導入 import sys class Window(QWidget): def __init__(self): super().__init__() self.setWindowTitle("QPlainTextEdit的學習") self.resize(500,500) self.set_ui() def set_ui(self): self.plainTextEdit = QPlainTextEdit(self) self.plainTextEdit.resize(300,300) self.plainTextEdit.move(100,100) self.test() btn = QPushButton(self) btn.setText("按鈕") btn.move(0,300) # btn.clicked.connect(self.test) def test(self): ############################模擬行號 ############################### line_num_parent =QWidget(self) line_num_parent.resize(30,300) line_num_parent.move(70,100) line_num_parent.setStyleSheet("background-color:cyan;") ############################模擬行號 ############################### if __name__ == '__main__': app =QApplication(sys.argv) window = Window() window.show() sys.exit(app.exec_())
第二步加上個標簽 並且將標簽中的內容豎着排列:
from PyQt5.Qt import * #剛開始學習可以這樣一下導入 import sys class Window(QWidget): def __init__(self): super().__init__() self.setWindowTitle("QPlainTextEdit的學習") self.resize(500,500) self.set_ui() def set_ui(self): self.plainTextEdit = QPlainTextEdit(self) self.plainTextEdit.resize(300,300) self.plainTextEdit.move(100,100) self.test() btn = QPushButton(self) btn.setText("按鈕") btn.move(0,300) # btn.clicked.connect(self.test) def test(self): ############################模擬行號 ############################### line_num_parent =QWidget(self) line_num_parent.resize(30,300) line_num_parent.move(70,100) line_num_parent.setStyleSheet("background-color:cyan;") self.line_label = QLabel(line_num_parent) self.line_label.move(0,0) self.line_label.setStyleSheet("background-color:red;") #讓標簽 內容 豎着排 #1-100 line_nums = "\n".join([str(i) for i in range(1,101)]) self.line_label.setText(line_nums) ############################模擬行號 ############################### if __name__ == '__main__': app =QApplication(sys.argv) window = Window() window.show() sys.exit(app.exec_())
第三步:讓文本滾動的時候,行號也跟着滾動
from PyQt5.Qt import * #剛開始學習可以這樣一下導入 import sys class Window(QWidget): def __init__(self): super().__init__() self.setWindowTitle("QPlainTextEdit的學習") self.resize(500,500) self.set_ui() def set_ui(self): self.plainTextEdit = QPlainTextEdit(self) self.plainTextEdit.resize(300,300) self.plainTextEdit.move(100,100) self.test() btn = QPushButton(self) btn.setText("按鈕") btn.move(0,300) # btn.clicked.connect(self.test) def test(self): ############################模擬行號 ############################### line_num_parent =QWidget(self) line_num_parent.resize(30,300) line_num_parent.move(70,100) line_num_parent.setStyleSheet("background-color:cyan;") self.line_label = QLabel(line_num_parent) self.line_label.move(0,5.5) # self.line_label.setStyleSheet("background-color:red;") #讓標簽 內容 豎着排 #1-100 line_nums = "\n".join([str(i) for i in range(1,101)]) self.line_label.setText(line_nums) self.line_label.adjustSize() # 使標簽根據內容自適應大小 #讓文本滾動的時候,行號也跟着滾動 self.plainTextEdit.updateRequest.connect(lambda rect,dy:self.line_label.move(0,self.line_label.y()+dy)) ############################模擬行號 ############################### if __name__ == '__main__': app =QApplication(sys.argv) window = Window() window.show() sys.exit(app.exec_())
這里只是稍微模擬了一下,主要是了解信號 updateRequest的使用
總結:
以上就是 QPlainTextEdit 控件,
到這,就將鍵盤文本輸入的三個(QLineEdit ,QTextEdit QPlainTextEdit ) 說完了,但是,這三個都不能采集用戶輸入的快捷鍵!
如何采集快捷鍵看下個:
QKeySewuenceEdit : https://www.cnblogs.com/zach0812/p/11385781.html

