返回顶部

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 

 

posted @ 2019-08-20 21:31  Zcb0812  阅读(5068)  评论(5编辑  收藏  举报