组件可以直接使用,请放心食用。(不爽xj的可以把类名改掉,但如果完全照搬代码的话最好注明来源,这是做人的最低底线。
import sys
from PyQt5.QtWidgets import QWidget,QTextEdit,QApplication
from PyQt5.QtGui import QTextCursor,QFont,QTextOption
from PyQt5.QtCore import Qt,pyqtSignal
class XJ_TextEdit(QTextEdit):
textSent=pyqtSignal(str)
def __init__(self,parent=None):
super(XJ_TextEdit, self).__init__(parent)
self.__oneLineMode=False
self.__sendMsgMode=True
self.setFont(QFont(self.font().family(),12))
self.__allowScale=False
def OneLineMode(self,flag:bool):
self.__oneLineMode=flag
if(flag):
self.__SetOneLineText()
height=self.__GetLineHeight()
if(flag):
self.setWordWrapMode(QTextOption.NoWrap)
self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
self.setMinimumHeight(height)
self.setMaximumHeight(height)
else:
self.setWordWrapMode(QTextOption.WrapAtWordBoundaryOrAnywhere)
self.setHorizontalScrollBarPolicy(Qt.ScrollBarAsNeeded)
self.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded)
self.setMinimumHeight(height)
self.setMaximumHeight(QApplication.desktop().screenGeometry().height())
def keyPressEvent(self, event):
enter=(event.key()==Qt.Key_Return or event.key()==Qt.Key_Enter)
ctrl=event.modifiers()==Qt.ControlModifier
if(enter):
if(self.__sendMsgMode):
if(self.__oneLineMode or ctrl):
self.textSent.emit(self.toPlainText())
self.setText("")
return
if(self.__oneLineMode and ctrl and event.key()==Qt.Key_V):
cursor = self.textCursor()
data=QApplication.clipboard().mimeData()
if(data.hasHtml()):
cursor.insertHtml(data.html())
elif(data.hasText()):
cursor.insertText(data.text())
self.__SetOneLineText()
return
super().keyPressEvent(event)
def Search(self,keyword):
cursor = self.textCursor()
text=self.toPlainText()
L=text.find(keyword,cursor.position())
if(L==-1):
L=text.find(keyword)
if(L==-1):
return False
R=L+len(keyword)
cursor.setPosition(L,QTextCursor.MoveAnchor)
cursor.setPosition(R,QTextCursor.KeepAnchor)
self.setTextCursor(cursor)
return True
def wheelEvent(self, event):
if(self.__allowScale and event.modifiers()==Qt.ControlModifier):
self.zoomIn(1 if event.angleDelta().y()>0 else -1)
if(self.__oneLineMode):
height=self.__GetLineHeight()
self.setMinimumHeight(height)
self.setMaximumHeight(height)
return
__wheel_V=self.verticalScrollBar()
__wheel_V.setValue(__wheel_V.value()-event.angleDelta().y())
def AllowWheelScale(self,flag):
self.__allowScale=flag
def SendMsgMode(self,flag:bool):
self.__sendMsgMode=flag
def __GetLineHeight(self):
return self.fontMetrics().lineSpacing()+10
def __SetOneLineText(self):
text=self.toPlainText()
sep=text.find('\n')+1
cursor = self.textCursor()
offset=len(text)-cursor.position()
while(sep):
if(self.__sendMsgMode):
self.textSent.emit(text[:sep])
text=text[sep:]
sep=text.find('\n')+1
self.setText(text)
offset=len(text)-offset
if offset<0:
offset=0
cursor.setPosition(offset,QTextCursor.MoveAnchor)
self.setTextCursor(cursor)
if __name__ == '__main__':
app = QApplication(sys.argv)
te=XJ_TextEdit()
te.append('<font color="red"> RRR </font>')
te.append("123456789\nABCDEFGHI\n123456789")
te.append('<font color="green"> GGG </font>')
te.Search("456")
te.Search("456")
te.setFont(QFont('楷体',20))
te.SendMsgMode(True)
te.textSent.connect(lambda s:print("【文本发送】\n",s))
te.OneLineMode(True)
te.AllowWheelScale(True)
te.show()
sys.exit(app.exec())
在 PyQt5 中,你可以通过处理鼠标滚轮事件来设置QTextEdit的字体大小。具体做法是在QTextEdit上重新实现wheelEvent方法,并根据滚轮方向调整字体大小。
PyQt5多行文本框控件QTextEdit简介
QTextEdit类是一个多行文本框控件,可以显示多行文本内容,当文本内容超出控件显示范围时,可以显示水平个垂直滚动条,Qtextedit不仅可以用来显示文本还可以用来显示HTML文档
QTextEdit类中常用的方法
1、按下按钮pushButton,把单行文本框lineEdit里的内容循环不断的添加到多行文本展示框textBrowser。
2、必须要用线程做这件事,不然主程序会卡死。
3、必须添加sleep(),不然主程序会卡死。
4、用函数的闭包做这样的事情,效果很好。
def slot1(self):
def _slot1(textBrowser,lineEdit):
while True:
textBrowser.append(lin
from PyQt5 import QtCore
from PyQt5.QtWidgets import QTextEdit
class MyQTextEdit(QTextEdit):
"""description of class"""
#============================================================
def _
<br /><br />textedit设置滚动条<br />ui->textEdit->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);<br />ui->textEdit->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn);<br />ui->textEdit->verticalScrollBar()->setValue(ui->textEdit->verticalScrollBar()->maxi
//如果直接是ui.textEdit也可以,但是滚动条就失效了。所以需要保持滚动条的作用时就要使用viewport
QScroller* scroller = QScroller::scroller(ui.textEdit->viewport());
//默认是触摸事件触发,这里改成鼠标事件触发。
scroller->grabGesture(ui.textEdit->viewport(), QScroller::LeftMouseB.
QT中的QMainWindow类为用户提供了一个主窗口程序,包括一个菜单栏、多个工具栏、多个锚接部件、一个状态条以及一个中央窗体,本程序结合了代码设计布局和ui的使用,全面体现了QMainWindow窗口中所用到的功能。更主要的是解决锚接部件的神秘性,解剖它的运行过程。
QLineEdit是 Qt 中的文本框,准确地说是单行文本框,通常用于接受用户的输入,比如输入用户名、密码等信息。下图为ui界面中,QLineEdit控件所处位置,便于初学者寻找。