使用 QThread 定期更新一个 QTableWidget pyqt [英] Use QThread to periodically update a QTableWidget pyqt

查看:70
本文介绍了使用 QThread 定期更新一个 QTableWidget pyqt的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的应用程序中,我使用 API 调用获取记录,然后将数据动态添加到 QTableWidget.到目前为止,这是我的代码片段:

In my application, I'm fetching records using an API call and then I add the data to a QTableWidget dynamically. Here is a snippet of my code so far:

class TriageUI(QtGui.QMainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)
        self.ui = Ui_TriageWindow()
        self.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint)
        self.move(QtGui.QApplication.desktop().screen().rect().center()- self.rect().center())
        self.ui.setupUi(self)
        self.update_records()        

    def update_records(self):
        #items are the results from the API fetch
        items = json.loads(get_triage_queue(COOKIES, SERVER, PORT))
        rows = len(items['objects'])
        self.ui.tableWidget.setColumnCount(5)
        self.ui.tableWidget.setRowCount(rows)
        index = 0
        column = 0
        for j in items['objects']:
            for key, value in j.iteritems():
                f = QtGui.QTableWidgetItem(str(value))
                self.ui.tableWidget.setItem(index, column, QtGui.QTableWidgetItem(f))
                column = column + 1

但是,我希望能够定期(例如在 15 秒后)对数据进行 API 调用,然后将结果中的任何新数据项添加到表中.我怎样才能做到这一点.

However, I want to be able to make the API call for data periodically(e.g after 15 seconds) and then add any new data items in the results to the table. How can I achieve this.

提前致谢.

推荐答案

这里有一个使用 update_records 函数)的示例>PyQt4.QtCore.QTimer.有时,解决问题的方法比我们想象的要容易.

Here you have an example of doing repetitive calls to a class member function (that could be your update_records function) using a PyQt4.QtCore.QTimer. Some times the solution to a problem is more easy than we think.

注意函数startstop.此功能使您可以随意启动和停止计时器.

Note the functions start and stop. This functions makes you able to start and stop the timer at your will.

from PyQt4 import QtGui as gui
from PyQt4 import QtCore as core


class Blinker(gui.QWidget):
    def __init__(self, parent=None):
        super(Blinker, self).__init__(parent)

        self.label = gui.QLabel(self)
        self.label.setFixedSize(200, 200)
        self.layout = gui.QHBoxLayout(self)
        self.layout.addWidget(self.label)

        self.timer  = core.QTimer(self)
        self.timer.setInterval(1000)          # Throw event timeout with an interval of 1000 milliseconds
        self.timer.timeout.connect(self.blink) # each time timer counts a second, call self.blink
        self.color_flag = True

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

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

    @core.pyqtSlot()
    def blink(self):
        if self.color_flag:
            self.label.setStyleSheet("background-color: blue;")
        else:
            self.label.setStyleSheet("background-color: yellow;")
        self.color_flag = not self.color_flag


if __name__ == '__main__':
    import sys
    app = gui.QApplication(sys.argv)

    w = Blinker()
    w.show()
    w.start()

    sys.exit(app.exec_())

这篇关于使用 QThread 定期更新一个 QTableWidget pyqt的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆