首页 > 解决方案 > 如何在主应用程序 Pyqt 中插入产生其他线程的 matplotlib 图 ..?

问题描述

我想使用 Pyqt5 制作监控应用程序并使用线程检查状态。

当应用程序状态更改时制作情节。但情节是由应用程序制作的。我希望那是在 pyqt 应用程序中制作情节。

在查看我的代码下。

class WindowClass(QDialog):

    def __init__(self) :

        QDialog.__init__(self, None)

    def test_6(self):

# thread is check for status changing

        if is_thread_on == False:

            schedule_thread = threading.Thread( target = self.scheduled )
            schedule_thread.daemon = True
            schedule_thread.start()


    def scheduled(self):

        schedule.clear()
        schedule.every(15).seconds.do( self.process_check )

    def new_print_plot(self):

        for i in range( 0 , 10 ) ):

            fig = plt.Figure()
            ax = fig.add_subplot(111)
            ax.scatter( x = x_length , y = data )

            canvas = FigureCanvas( fig )
            canvas.draw()

            self.horizontalLayout.addWidget( canvas )
            canvas.show()            

当你看到张贴的图片时。你可以很容易地理解我的目的。

请帮我。

在此处输入图像描述

在此处输入图像描述


import sys
import PyQt5
import pandas as pd
import os
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5 import uic
from PyQt5.QtWidgets import QMessageBox
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
import schedule
import threading
import time
import matplotlib.pyplot as plt

push = 'C:\\Users\\dyd52\\Desktop\\pyqt_study\\200213_practice.ui'

class WindowClass(QDialog):

   #global button_1
   #button_1 = QPushButton('button1')

   global is_thread_on

   def __init__(self) :

       QDialog.__init__(self, None)

       uic.loadUi(push , self)

       global is_thread_on

       is_thread_on = False

       #self.pushButton_hide1.hide()
       #self.pushButton_hide2.hide()
       #self.pushButton_hide3.hide()


       self.pushButton.clicked.connect( self.putton_add )
       self.pushButton_count.clicked.connect( self.count_button )
       #self.gridLayout_main.itemAt(0).clicked.connect( self.clickmethod )

   def putton_add(self):

       global is_thread_on

       data = pd.read_csv('C:\\Users\\dyd52\\Desktop\\pyqt_study\\200324_test.csv')
       fig = plt.Figure()
       ax = fig.add_subplot(111)

       ax.scatter( x = data['a'] , y = data['b'] )

       canvas = FigureCanvas( fig )
       canvas.draw()

       self.horizontalLayout.addWidget( canvas )
       canvas.show()


       if is_thread_on == False:


           schedule_thread = threading.Thread( target = self.moniter )
           schedule_thread.daemon = True
           is_thread_on = True
           print(is_thread_on)
           schedule_thread.start()


       #self.pushButton_hide1.show()
       #self.pushButton_hide1.setText( 'time to go home' )

   def moniter(self):

       schedule.clear()

       print('moniter on ! ')

       schedule.every(5).seconds.do( self.define_event )

       while True:

           schedule.run_pending()
           time.sleep(1)


   def define_event( self):

       print('define_event on ! ')

       for i in range( 0 , 3 ):

           item = self.horizontalLayout.takeAt(0)
           w = item.widget()

       for i in range(0, 3):

           data = pd.read_csv('C:\\Users\\dyd52\\Desktop\\pyqt_study\\200324_test.csv')
           fig = plt.Figure()
           ax = fig.add_subplot(111)

           ax.scatter( x = data['a'] , y = data['b'] )

           canvas = FigureCanvas( fig )
           canvas.draw()

           self.horizontalLayout.addWidget( canvas )
           canvas.show()



   def count_button(self):

       print( self.gridLayout_main.count() )
       print( self.gridLayout_main.itemAt(0) )


   def clickmethod(self):

       QMessageBox.about(self, 'title' , 'message')


if __name__ == "__main__" :
   app = QApplication(sys.argv)
   myWindow = WindowClass()
   myWindow.show()
   app.exec_()

在此处输入图像描述

标签: pythonmultithreadingmatplotlibpyqt5

解决方案


推荐阅读