我有一段无限运行的代码。我想将这段代码放在一个类中,并在另一个类中定义一个按钮。单击该按钮时,它应该调用类(代码所在的类),并且此类应该像原始代码一样无限运行。我尝试了几种从互联网上学到的方法,但根本没有运气。因为我对python完全不熟悉。任何帮助将不胜感激。
import time
import matplotlib
matplotlib.use("TkAgg")
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import matplotlib.pyplot as plt
import numpy as np
import tkinter as tk
from tkinter import *
import matplotlib.animation as animation
j=0
fig = plt.figure()
ax1 = fig.add_axes([0.85, 0.093, 0.04, 0.8])
cax = fig.add_subplot(1, 1, 1)
H = np.array([[1, 2, 3, 1], [4, 5, 6, 10], [3, 7, 8, 4], [10, 5, 3, 1]])
Z = np.array([[3, 290, 600], [1011, 230, 830], [152, 750, 5]])
def func(i):
global j
if j == 0:
j += 1
rows, cols = H.shape
im = plt.imshow(H, interpolation='nearest',
extent=[0, cols, 0, rows],
cmap='bwr', vmin=0, vmax=10)
fig.colorbar(im, cax=ax1, orientation='vertical')
elif j == 1:
j -= 1
rows, cols = H.shape
im = plt.imshow(Z, interpolation='nearest', cmap='Spectral', vmin=0, vmax=1023,
extent=[0, cols, 0, rows])
v = np.linspace(0, 1023, 15, endpoint=True)
fig.colorbar(im, cax=ax1, orientation='vertical', ticks=v)
ani = animation.FuncAnimation(fig, func, interval=1000)
plt.show()
最好使用Canvas
代替imshow
,因为稍后我会创建一个GUI并使用Tkinter。
答案 0 :(得分:0)
假设您有一个函数do_something
,您想在循环中重复调用它:
def do_something(...):
<whatever code you want>
假设您传入对窗口小部件的引用(例如:root
),您可以使用类似下面的示例连续运行此函数。在此示例中,它每秒运行一次代码(例如:1000 ms)。
def run_every_second(root):
do_something()
root.after(1000, run_every_second, root)
您只需拨打run_every_second
一次即可开始此过程:
root = tk.Tk()
...
run_every_second(root)
我不知道这种方法是否与matplotlib一起使用效果很好,但对于普通的tkinter,这是一种非常标准的技术。