- 28
- 0
最近在用PyQt5做界面开发,需求是读取数据文件(来自数据库,文件,内存都可以),显示在QTableWidget中。当前使用的方法是网上大部分用的读取一个内容然后用QTableWidget的setItem方法显示在QTableWidget中。
`for i in range(rows):
for j in range(cols):
temp_data = df.values[i][j] # 临时记录,不能直接插入表格
data = QTableWidgetItem(str(temp_data)) # 转换后可插入表格
self.table.setItem(i, j, data)`
这种方式在数据量在几千几万行的时候还可以显示,当数据量到达几十万行以上时就不行了,巨慢。而一个页面一次显示的行数是有限的,其他的行靠滚轮滑动来显示,那么在PyQt里面有没有一种方法,一次只显示一定行数的数据,其它的行在滑轮滚动时动态显示?
- 共 0 条
- 全部回答
-
卖萌是本性 普通会员 1楼
在PyQt中,我们可以使用PySide2库中的QtSql和QtOpenGL来实现表格内容的动态加载。以下是一个简单的示例:
首先,我们需要创建一个QtSql的QSqlQuery对象来查询表格中的数据。然后,我们可以使用QtOpenGL的QOpenGLContext和QOpenGLShaderSource来创建一个渲染器,并将查询结果渲染到一个QOpenGLSurface上。
```python import sys from PyQt5.QtCore import * from PyQt5.QtGui import * from PyQt5.QtSql import * from PyQt5.QtOpenGL import * from PyQt5.QtWidgets import *
class TableWidget(QWidget): def init(self): super().init()
self.setWindowTitle("Dynamic Table") self SQLiteConnection = QSqlDatabase.openDatabase('my_database.db') if not self.SQLiteConnection: print('Failed to open database') self.tableModel = QSqlQuery(self SQLiteConnection) if not self.tableModel: print('Failed to create query') self.tableModel.select("SELECT * FROM my_table") self.tableModel.exec() data = self.tableModel.fetchall() # Add the data to the widget for item in data: self.tableModel.addRow(item) selfOpenGLContext = QOpenGLContext() selfOpenGLContext.setRenderHint(QOpenGLContext枝状渲染) selfOpenGLSurface = QOpenGLSurface(selfOpenGLContext) selfOpenGLSurface.setFormat(QOpenGLSurfaceFormatRgb) selfOpenGLSurface.setAntialiasing(True) selfOpenGLRenderer = QOpenGLRenderer(selfOpenGLSurface) selfOpenGLRenderer.setGlslVersion(500) selfOpenGLRenderer.setRenderHint(QOpenGLRenderer.openglShadingProgram) selfOpenGLRenderer.setRenderHint(QOpenGLRenderer吐沫校正) selfOpenGLRenderer.setOpenGLSurfaceFormat(QOpenGLSurfaceFormatRgb) selfOpenGLRenderer.setVertexShaderSource(QOpenGLShaderSource("v3d/v3d_source_code")) selfOpenGLRenderer.setPixelShaderSource(QOpenGLShaderSource("v3d/v3d_source_code")) selfOpenGLRenderer.setShaderProgram(QOpenGLShaderProgram(selfOpenGLShaderSource)) selfOpenGLRenderer.setClearColor(0.1, 0.1, 0.1) selfOpenGLRenderer.setAlpha(0.5) selfOpenGLRenderer.setDoubleBuffer(True) selfOpenGLRenderer.setCacheMode(QOpenGLCacheModeFAST) selfOpenGLRenderer.setRenderHint(QOpenGLRenderer.cullMode, QOpenGLRenderer.CullModeBack) selfOpenGLRenderer.setBackbuffer(true) selfOpenGLRenderer.setDepthTest(True) selfOpenGLRenderer.setDepthRange(-1.0, 1.0) selfOpenGLRenderer.set stereoview(True) selfOpenGLRenderer.setWindow管理制度(QOpenGLWindow管理制度) selfOpenGLRenderer.setOpenGLContext(selfOpenGLContext) selfOpenGLRenderer.show() def update(self): # Load the new data from the database # ... # Update the table model with the new data # ... # Set the OpenGL context to the previous one # ... # Render the updated table model to the OpenGL surface # ...if name == "main": app = QApplication(sys.argv) widget = TableWidget() widget.show() sys.exit(app.exec_()) ```
在这个示例中,我们首先创建了一个QtSql的QSqlQuery对象来查询表格中的数据。然后,我们使用QtOpenGL的QOpenGLContext和QOpenGLShaderSource来创建一个渲染器,并将查询结果渲染到一个QOpenGLSurface上。当新的数据被加载时,我们更新表模型和渲染器,然后重绘OpenGL渲染器的窗口。最后,我们显示OpenGL渲染器的窗口。
注意,这只是一个基本的示例,实际的实现可能会更复杂,包括错误处理、数据验证、图形用户界面设计等。
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
