pyQt imshow没有更新

时间:2017-06-21 05:48:31

标签: python qt matplotlib pyqt imshow

我正在尝试更新矩阵并使用Qt与imshow显示它,但它没有更新,我得到一个警告,变量室正在影响另一个房间。 这是我在Qt中使用imshow的代码:(在定义了所需的库之后,矩阵“room”初始化为零。然后在Qt Designer中设计一个表单,其中一个名为“mplt_widget”的小部件和一个名为“start_PB”的按钮) / p>

from PyQt5 import uic
from PyQt5.QtWidgets import QApplication, QMainWindow, QVBoxLayout
from PyQt5 import QtCore
import os
import sys
import numpy as np
from time import sleep
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigCanv

# Initializing existence of wave in the room (0)
room = [[0.0 for mm in range(0, 100)] for nn in range(0, 100)]

plt.ion()

Form = uic.loadUiType(os.path.join(os.getcwd(), "FTDT.ui"))[0]


class PlotWin(QMainWindow, Form):
    def __init__(self):
        QMainWindow.__init__(self)
        Form.__init__(self)
        self.setupUi(self)

        self.fig = plt.figure(frameon=True)
        self.ax = Axes3D(self.fig)
        self.canvas = FigCanv(self.fig)

        self.line1 = []
        self.line1.append(self.ax.imshow(room))

        l = QVBoxLayout(self.mplt_widget)
        l.addWidget(self.canvas)

        self.PlotThread = PlotThread(0)
        self.start_PB.clicked.connect(self.start)

    def start(self):
        num = np.random.random()
        self.PlotThread = PlotThread(num)
        self.PlotThread.update_trigger.connect(self.update_plot)
        self.PlotThread.start()

    def update_plot(self, room):
        self.line1.set_data(room)
        self.canvas.draw()


class PlotThread(QtCore.QThread):
    update_trigger = QtCore.pyqtSignal(np.ndarray, np.ndarray)

    finished_trigger = QtCore.pyqtSignal()

    def __init__(self, decay):
        QtCore.QThread.__init__(self)
        self.decay = decay

    def run(self):
        for Time in range(10):

            for mm in range(0, 100):
                for nn in range(0, 100):
                    room[mm][nn] += self.decay*(room[mm][nn]/2 + 1/2)

            self.update_trigger.emit(room)
            sleep(1)

        self.finished_trigger.emit()

app = QApplication(sys.argv)
app.setStyle("Fusion")
w = PlotWin()
w.show()
sys.exit(app.exec_())

0 个答案:

没有答案