如何在PySide中自动刷新表视图?

时间:2015-08-26 06:38:15

标签: python pyside

我有以下代码段从网站上删除数据并在表格视图中显示结果。如何每1分钟或30秒更新或刷新表格。无论如何在pyside这样做?

import operator
from PySide.QtCore import *
from PySide.QtGui import *
from urllib import request
from lxml import etree

def getData():
    url =  "" # Removed valid url
    response = request.urlopen(url)
    html_parser = etree.HTMLParser()
    tree = etree.parse(response, html_parser)
    data_sets = tree.xpath("//div[@class='dataList']")
    headers = ['Company Name','LTP','Change', '%Chg', 'Volume (lacs)', '30 Days % Change','365 Days % Change']
    share_results = []

    for element in data_sets:
        result_list = []
        share_comp_name = element.xpath('ul/li/p/a')[0]
        result_list.append(share_comp_name.text)
        share_value_list = element.xpath('ul/li/span')
        counter = 0
        for data in share_value_list:
            result_list.append(float(str(data.text)))
            counter += 1
        share_results.append(tuple(result_list))
    return headers, share_results

class MyWindow(QWidget):

    def __init__(self, data_list, header, *args):
        QWidget.__init__(self, *args)
        self.setGeometry(300, 200, 550, 450)
        self.setWindowTitle("Click on column title to sort")
        table_model = MyTableModel(self, data_list, header)
        table_view = QTableView()
        table_view.setModel(table_model)
        font = QFont("Verdana", 9)
        table_view.setFont(font)
        table_view.resizeColumnsToContents()
        table_view.setSortingEnabled(True)
        layout = QVBoxLayout(self)
        layout.addWidget(table_view)
        self.setLayout(layout)

class MyTableModel(QAbstractTableModel):

    def __init__(self, parent, mylist, header, *args):
        QAbstractTableModel.__init__(self, parent, *args)
        self.mylist = mylist
        self.header = header

    def rowCount(self, parent):
        return len(self.mylist)

    def columnCount(self, parent):
        return len(self.header)

    def data(self, index, role):
        if not index.isValid():
            return None
        elif role != Qt.DisplayRole:
            return None
        return self.mylist[index.row()][index.column()]

    def headerData(self, col, orientation, role):
        if orientation == Qt.Horizontal and role == Qt.DisplayRole:
            return self.header[col]
        return None

    def sort(self, col, order):
        """sort table by given column number col"""
        self.emit(SIGNAL("layoutAboutToBeChanged()"))
        self.mylist = sorted(self.mylist,
            key=operator.itemgetter(col))
        if order == Qt.DescendingOrder:
            self.mylist.reverse()
        self.emit(SIGNAL("layoutChanged()"))


header, data_list = getData()
app = QApplication([])
win = MyWindow(data_list, header)
win.show()
app.exec_()

请帮忙。

0 个答案:

没有答案
相关问题