可以通过以下步骤实现:
from PyQt5.QtWidgets import QApplication, QMainWindow, QTableView
from PyQt5.QtCore import QAbstractTableModel, Qt, QThread, pyqtSignal
class CustomTableModel(QAbstractTableModel):
def __init__(self, data, headers):
super().__init__()
self.data = data
self.headers = headers
def rowCount(self, parent):
return len(self.data)
def columnCount(self, parent):
return len(self.headers)
def data(self, index, role):
if role == Qt.DisplayRole:
row = index.row()
col = index.column()
return self.data[row][col]
def headerData(self, section, orientation, role):
if role == Qt.DisplayRole:
if orientation == Qt.Horizontal:
return self.headers[section]
class Worker(QThread):
dataReady = pyqtSignal(list)
def __init__(self):
super().__init__()
def run(self):
# 异步获取数据的逻辑
data = self.fetchData()
self.dataReady.emit(data)
def fetchData(self):
# 异步获取数据的具体实现
# 返回一个包含数据的列表
pass
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.table = QTableView()
self.setCentralWidget(self.table)
self.worker = Worker()
self.worker.dataReady.connect(self.updateTable)
self.worker.start()
def updateTable(self, data):
headers = ['Column 1', 'Column 2', 'Column 3'] # 列名
model = CustomTableModel(data, headers)
self.table.setModel(model)
if __name__ == '__main__':
app = QApplication([])
window = MainWindow()
window.show()
app.exec_()
这样,当程序运行时,Worker对象会在后台异步获取数据,并通过dataReady信号将数据传递给主窗口类的updateTable方法,然后更新QTableView中的数据。你可以根据实际需求修改TableModel和Worker类的实现,以适应不同的数据获取和展示方式。
推荐的腾讯云相关产品:腾讯云云服务器(https://cloud.tencent.com/product/cvm)
领取专属 10元无门槛券
手把手带您无忧上云