PyQt5 控件學習(一個一個學習之QPlainTextEdit)


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_())
View Code

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_())
View Code

 

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_())
View Code

 

 

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_())
View Code

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_())
View Code

 

 

 

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_())
View Code

 

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_())
View Code

 

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_())
View Code

 

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_())
View Code

 

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_())
View Code

 

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_())
View Code

 

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_())
View Code

 

 

 

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_())
View Code

 

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_())
View Code

 

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_())
View Code

 

 

 

案例:模擬行號

 

 

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_())
View Code

第三步:讓文本滾動的時候,行號也跟着滾動  

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_())
View Code

這里只是稍微模擬了一下,主要是了解信號 updateRequest的使用  

總結:

以上就是 QPlainTextEdit 控件,

到這,就將鍵盤文本輸入的三個(QLineEdit ,QTextEdit QPlainTextEdit ) 說完了,但是,這三個都不能采集用戶輸入的快捷鍵!

如何采集快捷鍵看下個:

QKeySewuenceEdit : https://www.cnblogs.com/zach0812/p/11385781.html 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM