Как отобразить живое изображение на выходе Arduino в PyQt5 dockWidget? - PullRequest
0 голосов
/ 04 ноября 2019

Я хочу отображать текущие выходные данные arduino в pyQt5 dockWidget. Для этого я использовал приведенный ниже код, который отображает изображение в dockWidget.

def initUI(self):
    self.setWindowTitle(self.title)
    self.setGeometry(self.left, self.top, self.screen.width()-100, self.screen.height() - 100)
    self.fig = Figure(figsize=(9, 6), dpi=100)
    self.canvas = FigureCanvas(self.fig)

    self.dock1 = QDockWidget("Scan", self)
    self.dock1.setWidget(self.canvas)
    self.dock1.setStyleSheet("font: 12pt cambria")
    self.dock1.resize(QSize(1300, 400))
    self.dock1.adjustSize()
    self.addDockWidget(Qt.LeftDockWidgetArea, self.dock1, Qt.Horizontal)
    self.dock1.setLayout(QVBoxLayout())

    self.dock4 = QDockWidget("ToolBox", self)
    self.dock4.setStyleSheet("font: 12pt cambria")

    self.tabs = QTabWidget()
    self.tabs.setTabPosition(QTabWidget.North)
    self.inputTab = QWidget()

    self.tabs.addTab(self.inputTab, "Scanning Parameters")
    self.inputTab.layout = QFormLayout(self)

    #Input parameter
    firstGroupBox = QGroupBox("Input")
    firstLayout = QFormLayout()

    buttonStart = QPushButton('Start Scan',self)
    buttonStart.clicked.connect(self.start_scan)
    firstLayout.addRow(buttonStart)

    self.inputTab.layout.addRow(firstGroupBox)
    self.inputTab.setLayout(self.inputTab.layout)
    firstGroupBox.setLayout(firstLayout)

    self.addDockWidget(Qt.RightDockWidgetArea, self.dock4, Qt.Horizontal)
    self.dock4.setWidget(self.tabs)

def makeFig(self):#plot figures
    self.fig.clear()
    self.ax = self.fig.add_subplot(111)
    self.ax.imshow(np.transpose(self.df1), cmap='jet', aspect='auto')
    self.ax.set(title="B-scan image", xlabel="Distance (cm)")
    self.dock1.setWidget(self.canvas)
    self.canvas.draw()
    self.canvas.show()

@pyqtSlot()
def start_scan(self):
    arduinoSerialData = serial.Serial('com4', 9600)  # Create Serial port object called arduinoSerialData
    oldData = 0
    count = 0
    out = []

    while True:
        while (arduinoSerialData.inWaiting() == 0):
            pass
        try:
            myData = arduinoSerialData.readline()
            if int(myData) > oldData:
                # Execute the measurement
                output1 = list(myData)
                out.append(output1)
                self.df1 = pd.DataFrame(out)
                drawnow(self.makeFig)
                count = count + 1
                if count > 20:
                    break
            else:
                print("Pull up")
        except(KeyboardInterrupt, SystemExit, IndexError, ValueError):
            pass

Так как я использую drawnow, в котором есть plt.show (), что приводит к появлению пустого графика (рисунок 1), как показано на рисунке. Мне не нужен этот пустой график.

enter image description here

Кто-нибудь может подсказать, как удалить / скрыть этот всплывающий график?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...