Introducción a PyQt5 (28) Paquete de la aplicación PyQt5 con PyInstaller y uso de PyQtGraph para visualización de datos

Tabla de contenido

1. Empaquete la aplicación PyQt5 con PyInstaller

2. Utilice PyQtGraph para la visualización de datos


1. Empaquete la aplicación PyQt5 con PyInstaller

Al empaquetar, todas las bibliotecas dependientes se empaquetarán automáticamente. Entonces el volumen no es pequeño. .

Instalación: pip3 install pyinstaller

Código:

Opere directamente bajo la línea de comando

De uso común: pyinstaller -Fw nombre de archivo python

pyinstaller -Fw Calc. py
-W: no mostrar terminal
-F: empaquetar todas las bibliotecas en un solo archivo

 

bicho:

 from importlib_metadata import PackagePath as _PackagePath
ImportError: cannot import name 'PackagePath' from 'importlib_metadata' (D:\anaconda\lib\site-packages\importlib_metadata\__init__.py)

Ahora pyinstaller no es compatible con python3.6 y se está mejorando, por lo que puede ir a GitHub para descargar la última versión para usar, haga clic aquí

Bajo la versión de desarrollo.

Probé la versión de desarrollo, ¡sigue siendo el mismo error! ! ! ¡La mentalidad estalla! ! !

Vi una oración: asegúrese de actualizar pip a la última versión de pip antes de instalar pyinstaller. De lo contrario, pueden surgir problemas inexplicables.

Después de probarlo, ¡todavía no funciona! ! ! !

De repente vi que anaconda no estaba activada por la mañana

Así que empieza a activar, pincha aquí

Después de la activación, vuelva a abrir cmd e ingrese python y descubrió que todavía hay una advertencia. . . .

Al final, se descubrió que se trataba de un problema de anaconda. . . Cambié a pyinstaller bajo el compilador nativo de Python, no hay problema. . . Por supuesto, todavía no resolveré el problema anterior. . .

 Instale el paquete correspondiente en mi Python nativo y luego empaquételo para que sea exitoso. Se generarán tres carpetas y un archivo de especificaciones en el directorio actual. El archivo exe está en dist

 

 

2. Utilice PyQtGraph para la visualización de datos

Código:

pyqtgraph_pyqt.py

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'pyqtgraph_pyqt.ui'
#
# Created by: PyQt5 UI code generator 5.9.2
#
# 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.pyqtgraph1 = GraphicsLayoutWidget(self.centralwidget)
        self.pyqtgraph1.setGeometry(QtCore.QRect(10, 10, 721, 251))
        self.pyqtgraph1.setObjectName("pyqtgraph1")
        self.pyqtgraph2 = GraphicsLayoutWidget(self.centralwidget)
        self.pyqtgraph2.setGeometry(QtCore.QRect(10, 290, 501, 281))
        self.pyqtgraph2.setObjectName("pyqtgraph2")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 22))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))

from pyqtgraph import GraphicsLayoutWidget

Graph.py

'''

使用PyQtGraph绘图

pip Install pyqtgraph
'''


from PyQt5.QtCore import pyqtSlot
from PyQt5.QtWidgets import QMainWindow, QApplication
import pyqtgraph as pg
from pyqtgraph_pyqt import Ui_MainWindow
import numpy as np



class MainWindow(QMainWindow, Ui_MainWindow):

    def __init__(self, parent=None):

        super(MainWindow, self).__init__(parent)

        pg.setConfigOption('background', '#f0f0f0')
        pg.setConfigOption('foreground', 'd')


        self.setupUi(self)
        self.draw1()
        self.draw2()


    def draw1(self):

        self.pyqtgraph1.clear()

        '''第一种绘图方式'''
        print(np.random.normal(size=120))
        self.pyqtgraph1.addPlot(title="绘图单条线", y=np.random.normal(size=120), pen=pg.mkPen(color='b', width=2))

        '''第二种绘图方式'''
        plt2 = self.pyqtgraph1.addPlot(title='绘制多条线')

        plt2.plot(np.random.normal(size=150), pen=pg.mkPen(color='r', width=2),
                  name="Red curve")
        plt2.plot(np.random.normal(size=110) + 5, pen=(0, 255, 0), name="Green curve")
        plt2.plot(np.random.normal(size=120) + 10, pen=(0, 0, 255), name="Blue curve")


    def draw2(self):


        plt = self.pyqtgraph2.addPlot(title='绘制条状图')
        x = np.arange(10)
        print(x)
        y1 = np.sin(x)
        y2 = 1.1 * np.sin(x + 1)
        y3 = 1.2 * np.sin(x + 2)

        bg1 = pg.BarGraphItem(x=x, height=y1, width=0.3, brush='r')
        bg2 = pg.BarGraphItem(x=x + 0.33, height=y2, width=0.3, brush='g')
        bg3 = pg.BarGraphItem(x=x + 0.66, height=y3, width=0.3, brush='b')

        plt.addItem(bg1)
        plt.addItem(bg2)
        plt.addItem(bg3)

        self.pyqtgraph2.nextRow()

        p4 = self.pyqtgraph2.addPlot(title="参数图+显示网格")
        x = np.cos(np.linspace(0, 2 * np.pi, 1000))
        y = np.sin(np.linspace(0, 4 * np.pi, 1000))
        p4.plot(x, y, pen=pg.mkPen(color='d', width=2))
        #p4.showGrid(x=True, y=True)  # 显示网格



if __name__ == "__main__":
    import sys

    app = QApplication(sys.argv)
    ui = MainWindow()
    ui.show()
    sys.exit(app.exec_())

 

resultado de la operación:

 

 

Supongo que te gusta

Origin blog.csdn.net/weixin_44593822/article/details/113895598
Recomendado
Clasificación