
因为要对一段字符串进行多次处理,为了避免多次刷新UI带来的负担,肯定是先将数据读入内存,进行处理,然后一次性更新UI。
所以先调用QTextEdit的toPlainText将文本存入一个QString里。然后就有多种方法了。如果必须考虑行号的话,可以调用QString的split,将数据存入一个QStringList里,这样就可以得到一个QString的链表,每个节点一行,可以快速定位到任意一行。最后处理完是可以调用QStringList的join生产一个QString,再调用QTextEdit的setPlainText存入文本框。
[python] view plain copy
import sys
import os
from PyQt5QtCore import
from PyQt5QtWidgets import
class Notepad(QMainWindow):
def __init__(self):
super()__init__()
selfinitUI()
def initUI(self):
openAction = QAction('Open', self)
openActionsetShortcut('Ctrl+O')
openActionsetStatusTip('Open a file')
openActiontriggeredconnect(selfopenFile)
closeAction = QAction('Close', self)
closeActionsetShortcut('Ctrl+Q')
closeActionsetStatusTip('Close Notepad')
closeActiontriggeredconnect(selfclose)
menubar = selfmenuBar()
fileMenu = menubaraddMenu('&File')
fileMenuaddAction(openAction)
fileMenuaddAction(closeAction)
selftextEdit = QTextEdit(self)
selftextEditsetFocus()
selftextEditsetReadOnly(True)
selfresize(700, 800)
selfsetWindowTitle('Notepad')
selfsetCentralWidget(selftextEdit)
selfshow()
def openFile(self):
filename, _ = QFileDialoggetOpenFileName(self, 'Open File', osgetenv('HOME'))
fh = ''
if QFileexists(filename):
fh = QFile(filename)
if not fhopen(QFileReadOnly):
QtGuiqAppquit()
data = fhreadAll()
codec = QTextCodeccodecForUtfText(data)
unistr = codectoUnicode(data)
tmp = ('Notepad: %s' % filename)
selfsetWindowTitle(tmp)
selftextEditsetText(unistr)
def main():
app = QApplication(sysargv)
notepad = Notepad()
sysexit(appexec_())
if __name__ == '__main__':
main()
QT中LineEdit、TextEdit、PlainTextEdit这三个控件区别为:输入内容不同、用途不同、限制行数不同。
一、输入内容不同
1、LineEdit:LineEdit的输入内容为单行文本输入。
2、TextEdit:TextEdit的输入内容为多行文本输入。
3、PlainTextEdit :PlainTextEdit的输入内容为多行文本输入。
二、用途不同
1、LineEdit:LineEdit多用于用户名、密码等少量文本交互地方。
2、TextEdit:TextEdit多用于显示较多信息展示的地方,也可以显示HTML格式文本。
3、PlainTextEdit :PlainTextEdit用于需要与文本进行处理的地方。
三、限制行数不同
1、LineEdit:LineEdit只能显示的单行内容。
2、TextEdit:TextEdit可以限制显示的最大的行数。
3、PlainTextEdit :PlainTextEdit不能限制显示的最大的行数。
selftextBrowsersetLineWrapMode(QtWidgetsQTextEditNoWrap)
我用的pyqt5,找了半天才找到,qt的话估计也差不多。具体怎么找,用一个好的ide然后会自动探测textbrowser类下的方法,挨个看,都是字面意思,基本1分钟就能找到。
QTextEdit,QPlainTextEdit,这些是用toPlainText()来获取文本内容,而QLineEdit,QLabel,QTextBlock等是用text()来获取内容。
看帮助文件,一般text()和toPlainText()不在一个类里并存的。
具体toPlainText()还有什么作用也不太清楚了。
from PyQt4 import QtGui,QtCore
import threading,time
class sy(QtGuiQWidget):
txt_signal = QtCorepyqtSignal(str)
def __init__(self,parent=None):
selfapp=QtGuiQApplication([])
super(sy,self)__init__(parent)
selftxt=QtGuiQTextEdit()
lay=QtGuiQVBoxLayout()
selftxt_signalconnect(selfwritetoTextbox)
layaddWidget(selftxt)
selfsetLayout(lay)
def main(self):
selfshow()
selfappexec_()
def write(self,s):
selftxt_signalemit(s)
@QtCorepyqtSlot(str)
def writetoTextbox(self,text):
selftxtappend(text)
def PrintSomething(stream):
timesleep(3)
print('hello world',file=stream,end="Yes,it's a test!")
if __name__=='__main__':
s=sy()
t=threadingThread(target=PrintSomething,args=(s,))
tstart()
smain()
要点:
一、print(value, , sep=' ', end='\n', file=sysstdout):
file参数决定输出内容要输出到哪里,任何拥有write(self,s)方法的对象都可以充作此参数
value参数的字符串表示将被作为一次输出,定向到file对象
end参数将被作为第二次输出,定向到file对象
二、PyQt绘制出的GUI界面用常规方法是无法从后台线程访问界面上的控件的,所以这里就另外定义了一个pyqtSignal,在后台线程调用write方法时在write方法中引发此信号的事件。
以上就是关于如何让qtextedit动态加载内容全部的内容,包括:如何让qtextedit动态加载内容、pyqt5按钮打开文件、QT中LineEdit TextEdit PlainTextEdit 这三个控件有什么区别,分别用在什么情况下呢。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)