[英]Use QThread to periodically update a QTableWidget pyqt
In my application, I'm fetching records using an API call and then I add the data to a QTableWidget dynamically. 在我的应用程序中,我使用API调用获取记录,然后将数据动态添加到QTableWidget中。 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
However, I want to be able to make the API call for data periodically(eg after 15 seconds) and then add any new data items in the results to the table. 但是,我希望能够定期(例如15秒后)对数据进行API调用,然后将结果中的任何新数据项添加到表中。 How can I achieve this.
我该如何实现。
Thank you in advance. 先感谢您。
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
. 这里有一个使用
PyQt4.QtCore.QTimer
重复调用类成员函数(可以是update_records
函数)的PyQt4.QtCore.QTimer
。 Some times the solution to a problem is more easy than we think. 有时候解决问题比我们想象的要容易。
Note the functions start
and stop
. 注意
start
和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_())
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.