如何让qtextedit动态加载内容

如何让qtextedit动态加载内容,第1张

因为要对一段字符串进行多次处理,为了避免多次刷新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 这三个控件有什么区别,分别用在什么情况下呢。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9430518.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-28
下一篇2023-04-28

发表评论

登录后才能评论

评论列表(0条)

    保存