Python PyQT从.txt文件读取并更新TextEdit

Python PyQT从.txt文件读取并更新TextEdit,python,timer,pyqt,Python,Timer,Pyqt,以下是我试图做的: 1) 我一次存储10篇文章,使用Twitter API来流式传输文章。它们被存储到一个名为lrgDict.txt的文本文件中 导入tweepy、datetime、sys、os、time、pprint 从tweepy.api导入api 用户密钥“” 消费者_secret=“” access_token=“” access_token_secret=“” key=tweepy.OAuthHandler(使用者密钥,使用者密钥) key.set_access_token(acces

以下是我试图做的:

1) 我一次存储10篇文章,使用Twitter API来流式传输文章。它们被存储到一个名为lrgDict.txt的文本文件中

导入tweepy、datetime、sys、os、time、pprint 从tweepy.api导入api 用户密钥“” 消费者_secret=“” access_token=“” access_token_secret=“” key=tweepy.OAuthHandler(使用者密钥,使用者密钥) key.set_access_token(access_token,access_token\u secret) 类TwitterAPIStreamDictionary(tweepy.StreamListener): 输出={} 定义初始化(self,api=None): 打印(datetime.datetime.time(datetime.datetime.now()) self.api=api或api() self.j=0 self.k=10 def on_状态(自身、状态): self.output[status.id]={ “文本”:status.text.encode('utf-8'), “用户”:状态。用户。屏幕名称。编码('utf-8'), “地点”:status.place, “位置”:status.user.location} 输出=打开('dictLrg.txt','ab') 对于self.output中的tweet: output.write(“\n”.encode(encoding='utf-8')+”用户:“.encode(encoding='utf-8')+self.output[tweet]['User']+”\n.encode(encoding='utf-8')+”文本:“.encode(encoding='utf-8')+self.output[tweet]['Text']+'\n.encode(encoding='utf-8')) pprint.pprint(“用户:”.encode(encoding='utf-8')+self.output[tweet]['User']+“文本:”.encode(encoding='utf-8')+self.output[tweet]['Text']) output.flush() output.close() 如果self.j 2) 我使用PyQT调用这个类来运行、检索帖子,然后在TextEdit中显示它们

from PyQt4 import QtCore, QtGui
import sys, tweepy, TwitterAPIStreamSentiment, time, os
from tweepy.api import API

try:
    _fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
    def _fromUtf8(s):
        return s

try:
    _encoding = QtGui.QApplication.UnicodeUTF8
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig)

class Ui_Form(QtGui.QWidget):
    def __init__(self):
        QtGui.QWidget.__init__(self)
        self.setupUi(self)

    def setupUi(self, Form):
        Form.setObjectName(_fromUtf8("Form"))
        Form.resize(800, 600)
        self.verticalLayout_2 = QtGui.QVBoxLayout(Form)
        self.verticalLayout_2.setObjectName(_fromUtf8("verticalLayout_2"))
        self.verticalLayout = QtGui.QVBoxLayout()
        self.verticalLayout.setObjectName(_fromUtf8("verticalLayout"))
        self.searchText = QtGui.QLineEdit(Form)
        self.searchText.setObjectName(_fromUtf8("searchText"))
        self.verticalLayout.addWidget(self.searchText)
        self.submitButton = QtGui.QPushButton(Form)
        self.submitButton.setObjectName(_fromUtf8("submitButton"))
        self.verticalLayout.addWidget(self.submitButton)
        self.resultsText = QtGui.QPlainTextEdit (Form)
        self.resultsText.setReadOnly(True)
        self.resultsText.setObjectName(_fromUtf8("resultsText"))
        self.verticalLayout.addWidget(self.resultsText)
        self.verticalLayout_2.addLayout(self.verticalLayout)

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        Form.setWindowTitle(_translate("Form", "Form", None))
        self.submitButton.setText(_translate("Form", "Submit", None))
        self.submitButton.clicked.connect(self.printResults)

    def printResults(self):
        stream = tweepy.streaming.Stream(TwitterAPIStreamSentiment.key, TwitterAPIStreamSentiment.TwitterAPIStreamDictionary())
        stream.filter(track=[str(self.searchText.text())], async='true')
        file = open('dictLrg.txt', 'r', encoding="utf8").read()
        QtCore.QTimer.singleShot(15000, lambda: self.resultsText.insertPlainText(file))

if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    ex = Ui_Form()
    ex.show()
    sys.exit(app.exec())
我需要帮助的是:

1) 我如何让PyQT知道它调用的类何时完成了10篇文章的存储

2) 一旦PyQT附加到文本编辑后,如何重复该过程

3) 这是我的第一个Python项目,任何建设性的批评都受到热烈欢迎

我的最终目标是阅读推文,并对帖子进行实时情绪分析


谢谢大家

您基本上需要实现信号和插槽,我制作了一个示例来说明这一点,但该示例基于您的逻辑,而不是twiter api

from PyQt4 import QtGui, QtCore
import sys

class FetchData(QtCore.QObject):
    fetchFinished = QtCore.pyqtSignal(str)
    def __init__(self, *args):
        super(FetchData, self).__init__(*args)

    @QtCore.pyqtSlot()
    def run(self, searchStr):
        rtString = "Some data from no where : %s" % searchStr
        self.fetchFinished.emit(str(rtString))

class BASEGUICLS(QtGui.QDialog):
    def __init__(self,parent=None):
        super(BASEGUICLS, self).__init__(parent)
        self.verticalLayout = QtGui.QVBoxLayout()
        self.searchString = QtGui.QLineEdit()
        self.resultsText = QtGui.QPlainTextEdit()
        self.fetchButton = QtGui.QPushButton("Fetch")
        self.stopButton = QtGui.QPushButton("Stop")
        self.verticalLayout.addWidget(self.searchString)
        self.verticalLayout.addWidget(self.resultsText)
        self.verticalLayout.addWidget(self.fetchButton)
        self.verticalLayout.addWidget(self.stopButton)
        self.setLayout(self.verticalLayout)
        self.fetchData = FetchData()
        self.fetchData.fetchFinished.connect(self.updateResult)
        self.fetchButton.clicked.connect(self.getData)
        self.stopButton.clicked.connect(self.stopFetch)
        self.timer = QtCore.QTimer(self)
        self.timer.timeout.connect(self.refreshResult)

    def getData(self):
        self.timer.start(500)

    def refreshResult(self):
        searchStr = str(self.searchString.text())
        if not searchStr:
            self.stopFetch()
            raise RuntimeError("Missing Search String")
        self.fetchData.run(searchStr)

    def stopFetch(self):
        self.timer.stop()

    def updateResult(self, value):
        self.resultsText.appendPlainText(value)


def main():
    app = QtGui.QApplication(sys.argv)
    ex = BASEGUICLS(None)
    ex.show()
    sys.exit(app.exec_())

if __name__ == "__main__":
    main()

首先,不要将密钥发布到网上:)