找回密码
 会员注册
查看: 31|回复: 0

pythonPyQt5中富文本框QTextEdit的详细教程与应用实战

[复制链接]

2万

主题

0

回帖

6万

积分

超级版主

积分
69864
发表于 2024-9-5 10:40:25 | 显示全部楼层 |阅读模式
✨✨欢迎大家来到景天科技苑✨✨🎈🎈养成好习惯,先赞后看哦~🎈🎈🏆作者简介:景天科技苑🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。🏆《博客》:Python全栈,前后端开发,小程序开发,云原生K8S,人工智能,js逆向,App逆向,网络系统安全,数据分析,PyQt5和tkinter桌面开发,Django,fastapi,flask等框架,linux,shell脚本等实操经验,网站搭建,数据库等分享。所属的专栏:PyQt5桌面应用开发,零基础到进阶应用实战景天的主页:景天科技苑文章目录QTextEdit一、创建QTextEdit对象1.1基本创建1.2设置和获取文本内容二、文本格式化和样式2.1字体和样式2.2文本对齐2.3设置只读状态2.4字体和格式设置2.5滚动条控制三、文本选择和操作3.1文本选择3.2撤销和重做四、自动换行和滚动4.1自动换行4.2滚动控制五、高级用法5.1设置HTML内容5.2文本光标和文档操作5.2.1插入图片六、实际应用案例示例:富文本编辑器八、总结QTextEdit在PyQt5中,QTextEdit是一个非常强大的多行文本编辑控件,它不仅能够显示和编辑纯文本,还支持富文本(包括HTML格式)的显示和编辑。这使得QTextEdit成为在开发图形用户界面(GUI)应用时,用于处理文本内容的理想选择。本文将结合具体案例,详细介绍QTextEdit的各种用法和功能。一、创建QTextEdit对象1.1基本创建要创建一个QTextEdit对象,首先需要在PyQt5中导入相应的模块,并实例化QTextEdit类。以下是一个基本的示例,展示了如何创建一个包含QTextEdit的窗口:fromPyQt5.Qtimport*importsysclassWindow(QWidget):def__init__(self):#当我们继承某个类时,需要调用父类构造方法super().__init__()#设置窗口self.setWindowTitle("QTextEdit功能测试")self.resize(500,500)self.setup_ui()#此处调用一个个UI的方法展示即可defsetup_ui(self):#创建QTextEdit富文本输入框te=QTextEdit("景天来了",self)te.move(100,100)te.resize(200,200)#设置背景色te.setStyleSheet("background-color:cyan;")if__name__=='__main__':app=QApplication(sys.argv)window=Window()window.show()sys.exit(app.exec_())1234567891011121314151617181920212223242526272829303132在这个示例中,我们首先导入了PyQt5的模块。然后,我们通过面向对象变成方式创建了一个QWidget作为主窗口。通过实例化QTextEdit,我们创建了一个文本编辑框,并将其移动,设置其大小和背景颜色,最后将这个布局设置给主窗口,并显示窗口。1.2设置和获取文本内容QTextEdit提供了多种方法来设置和获取文本内容。最常用的方法是setPlainText()和toPlainText()。text_edit.setPlainText("Hello,PyQt5!")text=text_edit.toPlainText()12通过setPlainText()方法,我们可以将纯文本内容设置到QTextEdit中。而toPlainText()方法则用于获取QTextEdit中的纯文本内容。二、文本格式化和样式2.1字体和样式QTextEdit支持丰富的文本格式化功能,包括设置字体、颜色、样式和对齐方式等。你可以使用setFont()方法来设置文本字体,或者使用QTextCursor和QTextCharFormat来更详细地设置选定文本的格式。#0.导入需要的包和模块fromPyQt5.Qtimport*#主要包含了我们常用的一些类,汇总到了一块importsys#1.创建一个应用程序对象app=QApplication(sys.argv)#2.控件的操作#2.1创建控件window=QWidget()#2.2设置控件#设置窗口,默认是python,只有顶级控件才可以设置栏的window.setWindowTitle("字体样式")#设置窗口大小,注意,设置的空间尺寸大小,不包含上面的栏window.resize(500,500)text_edit=QTextEdit(window)text_edit.move(100,100)#设置普通文本text_edit.setPlainText("Hello,PyQt5!")#设置字体text_edit.setFont(QFont('Arial',12))#2.3展示控件window.show()#3.应用程序的执行,进入到消息循环sys.exit(app.exec_())12345678910111213141516171819202122232425262728293031323334352.2文本对齐QTextEdit支持段落对齐方式,包括左对齐、右对齐和居中对齐。要设置文本对齐方式,可以使用QTextBlockFormat类,并结合QTextCursor来实现。#0.导入需要的包和模块fromPyQt5.Qtimport*#主要包含了我们常用的一些类,汇总到了一块importsys#1.创建一个应用程序对象app=QApplication(sys.argv)#2.控件的操作#2.1创建控件window=QWidget()#2.2设置控件#设置窗口,默认是python,只有顶级控件才可以设置栏的window.setWindowTitle("文本对齐")#设置窗口大小,注意,设置的空间尺寸大小,不包含上面的栏window.resize(500,500)text_edit=QTextEdit(window)text_edit.move(100,100)#设置普通文本text_edit.setPlainText("Hello,PyQt5!")cursor=QTextCursor(text_edit.document())cursor.movePosition(QTextCursor.Start)whilenotcursor.atEnd():cursor.movePosition(QTextCursor.StartOfBlock)cursor.select(QTextCursor.BlockUnderCursor)block_format=QTextBlockFormat()block_format.setAlignment(Qt.AlignCenter)cursor.mergeBlockFormat(block_format)cursor.movePosition(QTextCursor.EndOfBlock)cursor.movePosition(QTextCursor.NextBlock)#2.3展示控件window.show()#3.应用程序的执行,进入到消息循环sys.exit(app.exec_())1234567891011121314151617181920212223242526272829303132333435363738394041424344上述代码将QTextEdit中的所有文本段落设置为居中对齐。输入内容,也会居中对齐2.3设置只读状态使用setReadOnly方法可以设置QTextEdit是否为只读状态。当设置为True时,用户无法编辑文本,只能查看。text_edit.setReadOnly(True)#设置为只读text_edit.setReadOnly(False)#设置为可编辑122.4字体和格式设置QTextEdit支持丰富的文本格式化功能。可以通过setFont和setFontPointSize方法设置文本的字体和大小。如果需要更详细的格式化,如加粗、斜体、下划线等,可以使用QTextCursor和QTextCharFormat类。以下是一个设置文本格式的示例:fromPyQt5.QtGuiimportQTextCursor,QTextCharFormat,QFontcursor=text_edit.textCursor()char_format=QTextCharFormat()char_format.setFontWeight(QFont.Bold)cursor.mergeCharFormat(char_format)1234562.5滚动条控制QTextEdit提供了verticalScrollBar和horizontalScrollBar方法来获取滚动条,从而实现对文本的滚动控制。如果需要自定义滚动行为,可以通过这些滚动条对象进行操作。三、文本选择和操作3.1文本选择用户可以通过鼠标或键盘选择QTextEdit中的文本,并执行如复制、剪切和粘贴等操作。QTextEdit也提供了一组方法来实现这些功能,例如selectAll()、copy()和paste()。#选择所有文本text_edit.selectAll()#复制选中的文本text_edit.copy()#粘贴文本到光标位置text_edit.paste()123456783.2撤销和重做QTextEdit支持撤销和重做功能,用户可以通过菜单项或快捷键来触发这些操作。你也可以通过编程方式来实现撤销和重做功能。#撤销操作text_edit.undo()#重做操作text_edit.redo()12345四、自动换行和滚动4.1自动换行QTextEdit支持自动换行功能,当文本内容超出控件的显示范围时,会自动换行显示,而不是水平滚动。你可以通过setLineWrapMode()方法来设置自动换行的模式。#设置自动换行模式为以控件宽度为限制,保持单词完整性text_edit.setLineWrapMode(QTextEdit.WidgetWidth)124.2滚动控制QTextEdit提供了垂直和水平滚动条,你可以通过verticalScrollBar()和horizontalScrollBar()方法来获取这些滚动条,进而控制滚动条的位置。vertical_scrollbar=text_edit.verticalScrollBar()vertical_scrollbar.setValue(100)#滚动到垂直位置10012五、高级用法5.1设置HTML内容QTextEdit支持HTML格式的文本。可以使用setHtml方法来设置HTML内容,并使用toHtml方法获取当前的HTML内容。这对于需要显示富文本的应用程序非常有用。#0.导入需要的包和模块fromPyQt5.Qtimport*#主要包含了我们常用的一些类,汇总到了一块importsys#1.创建一个应用程序对象app=QApplication(sys.argv)#2.控件的操作#2.1创建控件window=QWidget()#2.2设置控件#设置窗口,默认是python,只有顶级控件才可以设置栏的window.setWindowTitle("设置html内容")#设置窗口大小,注意,设置的空间尺寸大小,不包含上面的栏window.resize(500,500)text_edit=QTextEdit(window)text_edit.move(100,100)text_edit.setHtml("HelloPyQt5!")html_content=text_edit.toHtml()print(html_content)#输出HTML代码#2.3展示控件window.show()#3.应用程序的执行,进入到消息循环sys.exit(app.exec_())1234567891011121314151617181920212223242526272829303132335.2文本光标和文档操作QTextCursor是QTextEdit中一个非常重要的类,它用于对文档进行编辑和格式化。通过textCursor方法可以获得当前的光标对象,然后使用它来对选定的文本进行操作,如插入文本、删除文本、应用格式等。5.2.1插入图片QTextEdit支持在文本中插入图片。可以通过QTextDocument的addResource方法和QTextCursor的insertImage方法来实现。#0.导入需要的包和模块fromPyQt5.Qtimport*#主要包含了我们常用的一些类,汇总到了一块importsys#1.创建一个应用程序对象app=QApplication(sys.argv)#2.控件的操作#2.1创建控件window=QWidget()#2.2设置控件#设置窗口,默认是python,只有顶级控件才可以设置栏的window.setWindowTitle("插入图片")#设置窗口大小,注意,设置的空间尺寸大小,不包含上面的栏window.resize(500,500)text_edit=QTextEdit(window)text_edit.move(100,100)image=QImage("../../imgs/python-gui.png")cursor=text_edit.textCursor()document=text_edit.document()document.addResource(QTextDocument.ImageResource,QUrl("image"),image)cursor.insertImage("image")#2.3展示控件window.show()#3.应用程序的执行,进入到消息循环sys.exit(app.exec_())1234567891011121314151617181920212223242526272829303132333435363738六、实际应用案例示例:富文本编辑器以下是一个简单的富文本编辑器示例,它结合了QTextEdit的多个功能,如设置文本格式、插入图片、显示HTML内容等。fromPyQt5.Qtimport*#主要包含了我们常用的一些类,汇总到了一块importsysclassRichTextEditor(QMainWindow):def__init__(self):super().__init__()self.initUI()definitUI(self):self.setWindowTitle('富文本编辑器')self.setGeometry(100,100,800,600)self.text_edit=QTextEdit()self.setCentralWidget(self.text_edit)#创建菜单栏menubar=self.menuBar()#文件菜单file_menu=menubar.addMenu('文件')open_action=QAction('打开',self)open_action.setShortcut('Ctrl+O')open_action.triggered.connect(self.open_file)file_menu.addAction(open_action)#插入菜单insert_menu=menubar.addMenu('插入')image_action=QAction('图片',self)image_action.triggered.connect(self.insert_image)insert_menu.addAction(image_action)#工具栏(这里仅作为示例,未实际创建)#...defopen_file(self):#实现打开文件的逻辑(略)passdefinsert_image(self):#插入图片的逻辑image_path="../../imgs/python-gui.png"#假设这是用户选择的图片路径image=QImage(image_path)cursor=self.text_edit.textCursor()document=self.text_edit.document()document.addResource(QTextDocument.ImageResource,QUrl("image"),image)cursor.insertImage("image")if__name__=='__main__':app=QApplication(sys.argv)editor=RichTextEditor()editor.show()app.exec_()1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253点击插入图片在这个示例中,我们创建了一个QMainWindow作为主窗口,并在其中放置了一个QTextEdit作为文本编辑器。我们还添加了一个菜单栏,包括“文件”和“插入”两个菜单项,分别用于打开文件和插入图片。注意:上述代码中的open_file方法没有实现具体的文件打开逻辑,仅作为示例框架的一部分。在实际应用中,你需要使用QFileDialog等类来实现文件选择功能。八、总结QTextEdit是PyQt5中一个功能强大的文本编辑控件,支持纯文本和富文本的编辑和显示。通过本文的介绍和示例代码,你应该已经掌握了QTextEdit的基本用法和高级功能。希望这些信息能够帮助你在开发基于PyQt5的应用程序时,更好地利用QTextEdit控件。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2025-1-7 06:08 , Processed in 0.429856 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表