Разместите несколько изображений на одном графике в Python, используя FigureCanvasTkAgg - PullRequest
0 голосов
/ 16 мая 2018

Я хочу построить несколько изображений на одном графике в python, используя FigureCanvasTkAgg. При использовании matplotlib я мог бы использовать {import matplotlib.pyplot as plt} plt.imshow(image1) ; plt.pause(0.6) ; plt.imshow(image2) Поскольку я использую Tkinter, я использую FigureCanvasTkAgg для того же

   `f = Figure(figsize=(6,6))

    a = f.add_subplot(111)
    image = np.array(np.random.random((1024,1024))*100,dtype=int)
    a.imshow(image)

    canvas = FigureCanvasTkAgg(f, self)
    canvas.show()
    canvas.get_tk_widget().pack(side=tk.BOTTOM, fill=tk.BOTH, expand=True)`

Может кто-нибудь помочь мне, как добиться эффекта паузы matplotlib в FigureCanvasTkAgg.

1 Ответ

0 голосов
/ 16 мая 2018

Вы можете использовать модуль threading, чтобы запланировать выполнение функции:

from threading import Thread

def wrapper():
    time.sleep(5)
    image = np.array(np.random.random((1024,1024))*100,dtype=int)
    ax.imshow(image)
    canvas.draw()

_t = Thread(target=wrapper)
_t.start()

Это выполнит функцию wrapper в новом потоке, поэтому исходная программа может продолжаться.

Вот полный пример:

#!/usr/bin/env python
import time
import tkinter as tk
from threading import Thread
import matplotlib
matplotlib.use("TkAgg")
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from matplotlib.figure import Figure
import numpy as np

root = tk.Tk()
f = Figure(figsize=(6,6))

ax = f.add_subplot(111)
# First image    
image = np.array(np.random.random((1024,1024))*100, dtype=int)
ax.imshow(image)

canvas = FigureCanvasTkAgg(f, root)
canvas.draw()
canvas.get_tk_widget().pack(side=tk.BOTTOM, fill=tk.BOTH, expand=True)

def wrapper():
    time.sleep(5)
    # Second image appears after 5 seconds
    image = np.array(np.random.random((1024,1024))*100,dtype=int)
    ax.imshow(image)
    canvas.draw()

_t = Thread(target=wrapper)
_t.start()

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