visualización de la ventana tabla dinámica PyQt5

En algunos casos, puede que tenga que actualizar la pantalla para reflejar los cambios dinámicos en el gráfico de datos en una interfaz de ventana. Sólo estoy haciendo la situación tal encontrado proyecto, es necesario para mostrar un diagrama de Gantt dinámico, sólo como ejemplo para decirle cómo lograr. En primer lugar, directamente en el código completo:

import sys
import matplotlib
import datetime

matplotlib.use("Qt5Agg")
from PyQt5 import QtCore
from PyQt5.QtWidgets import QApplication,  QVBoxLayout, QSizePolicy, QWidget
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure
import matplotlib.pyplot as plt


class MyMplCanvas(FigureCanvas):

    def __init__(self, parent=None, width=5, height=4, dpi=100):

        # 配置中文显示
        plt.rcParams['font.family'] = ['SimHei']  # 用来正常显示中文标签
        plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号

        self.fig = Figure(figsize=(width, height), dpi=dpi)  # 新建一个figure
        self.axes = self.fig.add_subplot(111)  # 建立一个子图,如果要建立复合图,可以在这里修改

        FigureCanvas.__init__(self, self.fig)
        self.setParent(parent)

        FigureCanvas.setSizePolicy(self,
                                   QSizePolicy.Expanding,
                                   QSizePolicy.Expanding)
        FigureCanvas.updateGeometry(self)

    '''启动显示动态图'''
    def Display_dynamic_gantt(self, *args, **kwargs):
        # 设置一个时间对象
        timer = QtCore.QTimer(self)
        # 连接需要动态刷新的方法函数
        timer.timeout.connect(self.update_figure)
        # 表示每1秒钟刷新一次
        timer.start(1000)

    '''绘制动态图方法函数,可以在这里定义自己的绘图逻辑'''
    def update_figure(self):
        # 每次重新绘制前需要清楚之前绘制的内容
        # 获取当前的系统时间
        now = datetime.datetime.now()
        self.axes.clear()
        l1 = now.second * 1.8
        if l1 > 60:
            l1 = 60
        l2 = now.second * 1.5
        if l2 > 60:
            l2 = 60
        # 画甘特图
        self.axes.barh((1, 2, 3, 4, 5), (0 + now.second, 0 + l1, 0 + now.second, 0 + l2, 0 + now.second), 0.5,
                       (0, 60, 120, 180, 240))
        self.axes.set_yticks(range(1, 6, 1))
        self.axes.set_yticklabels(('a', 'b', 'c', 'd', 'e'))
        self.axes.set_xticks(range(0, 300, 60))
        self.axes.set_xticklabels((u'周一', u'周二', u'周三', u'周四', u'周五'))
        self.draw()


class MatplotlibWidget(QWidget):
    def __init__(self, parent=None):
        super(MatplotlibWidget, self).__init__(parent)
        self.initUi()

    def initUi(self):
        self.layout = QVBoxLayout(self)
        self.mpl = MyMplCanvas(self, width=5, height=4, dpi=100)
        # 初始化显示甘特图
        self.mpl.Display_dynamic_gantt()
        self.layout.addWidget(self.mpl)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ui = MatplotlibWidget()
    ui.show()
    sys.exit(app.exec_())

Código ella, sólo debes elegir un ejemplo importante, sobre todo para dar quiere lograr rápidamente aspecto blanco, sin necesidad de conocer todo el código!
En primer lugar, puede copiar el código completo como plantilla (porque soy tal ji, ji), puede modificar la parte principal de dos: Inicio mapa de visualización dinámica, funciones de los métodos dinámicos mapa de representación, el resto no puede controlar, directa es decir!
En primer lugar, la sección de inicio de visualización dinámica figura Esta sección define una función Display_dynamic_gantt (), se utiliza principalmente para mostrar el gráfico dinámico, en el que se proporciona un objetos QTimer, esta función se puede utilizar para actualizar, timer.timeout.connect () se utiliza para conectar las necesidades de función para ser actualizados, timer.start (1000) indica el inicio de una actualización dinámica, la función de actualización una vez por segundo soportes conectados.
Segundo método de hacer la función de mapa dinámico, esta sección define la función a update_figure update (), se representa como una función de la carta Gantt dinámico. Aquí, he utilizado un método de fecha y hora, se puede conseguir que el sistema actual de hora, fecha, minutos y segundos pueden ser, porque para lograr la actualización, tiene la necesidad de actualizar la condición de que cada llamada tendrá diferentes datos, entonces el más fácil el camino es conseguir la hora del sistema (algunas personas utilizan la función aleatoria puede ser, pero los datos obtenidos es incierta, por lo que no es aplicable). A continuación hay que self.axes.clear llamada (), esto es muy importante, porque no se quita el último resultado antes de cada sorteo, trazando será retenido hasta que los resultados se pueden imaginar! Aquí tengo el tiempo en segundos, que se pueden actualizar más rápidamente. A continuación, dibuje es parte de la carta, aquí podemos sacar el gráfico que desea, tengo un diagrama de Gantt, por ejemplo, específicamente la forma en que puede mirar el dibujo antes de escribir el artículo método popular de Matplotlib.pyplot . Añadí a la anchura de la Gantt trazar el número de segundos la hora del sistema, por lo que cada vez después de la función de actualización se volverá a dibujar un diagrama de Gantt, y la anchura de cada uno es la segunda vez que el tamaño del sistema actual. Asimismo, establecer la barra por un par de velocidades diferentes, tales como L1 es 1,8 veces la velocidad, y establecer el rango no puede exceder de 60.
En resumen querer dibujar la imagen y la puso a resultados de la actualización, los resultados son los siguientes, pero debido a que es tiro por lo que no es dinámica, el efecto neto es la longitud de cada barra va a cambiar! Pues bien, esta parte de introducción a esto, el siguiente para decirle cómo configurar los controles se muestran en el archivo gráfico de la interfaz de usuario!
Aquí Insertar imagen Descripción

Publicado 17 artículos originales · ganado elogios 3 · Vistas 1798

Supongo que te gusta

Origin blog.csdn.net/weixin_43350361/article/details/105376452
Recomendado
Clasificación