账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    PyQt表格内容动态加载。
    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
    打赏
    收藏
    点击回答
        全部回答
    • 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渲染器的窗口。

      注意,这只是一个基本的示例,实际的实现可能会更复杂,包括错误处理、数据验证、图形用户界面设计等。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部