Спасибо! Это прекрасно работает, именно то, что я искал. Спасибо за другие советы, теперь я лучше понимаю, как работает код.

ользую Python только пару недель. У меня нет проблем с отображением данных, поступающих с Arduino с Matplotlib. Однако график отображается как всплывающее окно, и я хотел бы, чтобы этот график отображался только на холсте в корневом окне графического интерфейса, который я создаю с помощью tkinter. Я пробовал несколько комбинаций вещей, и я не могу заставить его работать. Если я просто добавлю значения графика в код, скажем:

a.plot([1, 2, 3, 4, 5], [2, 3, 4, 5, 6, 7])

он работает нормально, поэтому моя главная проблема заключается в цикле while при получении данных из Arduino. Я также попробовал вариант drawnow, чтобы обновить сюжет, но получаю точно такой же результат. Что бы я ни делал, я не могу заставить сюжет перестать отображаться как отдельное окно.

[Окно печати с основным окном GUI сзади] [1]

Вот пример кода, который я использую:

import serial
from tkinter import *
import numpy as np
from matplotlib import pyplot as plt
import matplotlib.animation as animation
from matplotlib import style
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg


root = Tk()
root.geometry('1200x700+200+100')
root.title('This is my root window')
root.state('zoomed')
root.config(background='#fafafa')


yar = []
plt.ion()
style.use('ggplot')
fig = plt.figure(figsize=(14, 4.5), dpi=100)
ax1 = fig.add_subplot(1, 1, 1)
ser = serial.Serial('com3', 9600)

def animate(i):
    while True:
        ser.reset_input_buffer()
        data = ser.readline().decode("utf-8")
        data_array = data.split(',')
        yvalue = float(data_array[1])
        yar.append(yvalue)
        print(yvalue)
        plt.ylim(0, 100)
        ax1.plot(yar, 'r', marker='o')
        plt.pause(0.0001)


plotcanvas = FigureCanvasTkAgg(fig, root, animate)
plotcanvas.get_tk_widget().grid(column=1, row=1)
ani = animation.FuncAnimation(fig, animate, interval=1000, blit=True)
plotcanvas.show()

root.mainloop()

Ответы на вопрос(1)

Ваш ответ на вопрос