程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

PyQt5快速開發與實戰 9.3 Pandas在PyQt中的應用

編輯:Python

PyQt5快速開發與實戰

文章目錄

    • PyQt5快速開發與實戰
      • 9. 第9章 PyQt5 擴展應用
        • 9.3 Pandas在PyQt中的應用
          • 9.3.1 qtpandas的安裝
          • 9.3.2 官方示例
          • 9.3.3 設置提升的窗口控件
          • 9.3.4 qtpandas的使用

9. 第9章 PyQt5 擴展應用

9.3 Pandas在PyQt中的應用

Pandas是 Python的一個數據分析包,是由AQR Capital Management在2008年4月開發的,並於2009年年底開源,目前由專注於Python數據包開發的PyData開發組繼續開發和維護,屬於PyData項目的一部分。Pandas最初是被作為金融數據分析工具而開發的,並為時間序列分析提供了很好的支持。從 Pandas 這個名稱就可以看出,它是面板數據(Panel Data)和 Python數據分析(Data Analysis)的結合
在Pandas出現之前,Python數據分析的主力軍只有NumPy比較好用;在 Pandas出現之後,它基本上占據了Python數據分析的霸主地位,它在處理基礎數據尤其是金融時間序列數據方面非常高效。

使Pandas與 PyQt結合,最方便的方法就是安裝qtpandas模塊庫。這個模塊庫幫助我們把Pandas 的數據顯示在 QTableWidget上,並自動實現各種QTableWidget的功能,如增加、刪除、修改、保存、排序等。這些功能實現起來比較麻煩,但是利用qtpandas,我們就可以無須費力地手動重新實現。

9.3.1 qtpandas的安裝
  1. 安裝pandas

    pip install pandas -i https://pypi.tuna.tsinghua.edu.cn/simple
    

  2. 安裝qtpandas

    pip install qtpandas -i https://pypi.tuna.tsinghua.edu.cn/simple
    

    可以看到安裝失敗了,啊這,開始谷歌…

    https://github.com/draperjames/qtpandas
    

    下載到本地

    解壓

    從虛擬環境切到該目錄進行安裝

    安裝時會卡在一個包,叫

    這個時候,請出清華源,先把這個包裝了,

    再次嘗試

    沒有報錯,走下來了

  3. 查看是否安裝成功

9.3.2 官方示例

跑一下

報錯了

大佬說原因應該是pandas版本升高了,

跟著錯誤找過去

改成這樣

再次運行官方示例

很好,又報錯了

改成import *

再次運行

窗口出來了

又出現了野生的錯誤

開始谷歌…

再次執行

完美運行

9.3.3 設置提升的窗口控件

【解決Qt Designer中沒有DataTableWidget和DataFrameModel兩個類對應的窗口控件】

所謂提升的窗口控件,就是指有些窗口控件是用戶自己基於PyQt定義的衍生窗口控件,這些窗口控件在Qt Designer中沒有直接提供,但是可以通過提升的窗口控件這個功能來實現。具體方法如下:

點擊添加

提升

導出ui轉為py

提升的窗口控件是PyQt中非常簡單、實用而又強大的功能,利用該功能可以通過Qt Designer來實現PyQt與Python 的一些強大的模塊之間的交互功能,可以充分利用PyQt和 Python兩者的優點來快速開發程序。

9.3.4 qtpandas的使用

UI: Ui_pandas_pyqt.py

# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'pandas_pyqt.ui'
#
# Created by: PyQt5 UI code generator 5.6
#
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800, 600)
self.centralWidget = QtWidgets.QWidget(MainWindow)
self.centralWidget.setObjectName("centralWidget")
self.pushButton = QtWidgets.QPushButton(self.centralWidget)
self.pushButton.setGeometry(QtCore.QRect(680, 60, 75, 23))
self.pushButton.setObjectName("pushButton")
self.pushButton_2 = QtWidgets.QPushButton(self.centralWidget)
self.pushButton_2.setGeometry(QtCore.QRect(680, 170, 75, 23))
self.pushButton_2.setObjectName("pushButton_2")
self.pandastablewidget = DataTableWidget(self.centralWidget)
self.pandastablewidget.setGeometry(QtCore.QRect(10, 30, 591, 331))
self.pandastablewidget.setStyleSheet("")
self.pandastablewidget.setObjectName("pandastablewidget")
MainWindow.setCentralWidget(self.centralWidget)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.pushButton.setText(_translate("MainWindow", "數據初始化"))
self.pushButton_2.setText(_translate("MainWindow", "保存數據"))
from qtpandas.views.DataTableView import DataTableWidget

pandas_pyqt.py

# -*- coding: utf-8 -*-
""" Module implementing MainWindow. """
from PyQt5.QtCore import pyqtSlot
from PyQt5.QtWidgets import QMainWindow, QApplication
from Ui_pandas_pyqt import Ui_MainWindow
from qtpandas.models.DataFrameModel import DataFrameModel
import pandas as pd
class MainWindow(QMainWindow, Ui_MainWindow):
""" Class documentation goes here. """
def __init__(self, parent=None):
""" Constructor @param parent reference to the parent widget @type QWidget """
super(MainWindow, self).__init__(parent)
self.setupUi(self)
'''初始化pandasqt'''
widget = self.pandastablewidget
widget.resize(600, 500) # 如果對部件尺寸大小不滿意可以在這裡設置
self.model = DataFrameModel() # 設置新的模型
widget.setViewModel(self.model)
self.df = pd.read_excel(r'data/fund_data.xlsx')
self.df_original = self.df.copy() # 備份原始數據
self.model.setDataFrame(self.df)
@pyqtSlot()
def on_pushButton_clicked(self):
""" 初始化pandas """
self.model.setDataFrame(self.df_original)
@pyqtSlot()
def on_pushButton_2_clicked(self):
""" 保存數據 """
self.df.to_excel(r'data/fund_data_new.xlsx')
if __name__ == "__main__":
import sys
from pyqt5_plugins.examples.exampleqmlitem import QtCore
QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling)
app = QApplication(sys.argv)
ui = MainWindow()
ui.show()
sys.exit(app.exec_())

運行

通過窗口更改數據,查看原來的Excel表格數據,即“new”中的。


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved