我想在带有tkinter的Frame中显示一个实时2动画图3D。
我看到了类似的问题3D animation using matplotlib,但是它不起作用-出现一个空窗口(框架),没有显示图形
(我知道打包和网格存在问题-必须使用一个或另一个)
这是我的画框:
from tkinter import Canvas,Button,GROOVE,Tk
fenetre = Tk() # Instancier la fenêtre
fenetre.title("Simulation Gaz parfait") # Ajouter un titre à la fenêtre
zone_titre=Canvas(fenetre,width=400,height=50)
zone_titre.grid(column=0,row=0,columnspan=2)
titre = zone_titre.create_text((70, 30), text="Simulation Gaz parfait")
particules=Canvas(fenetre,width=400,height=400,borderwidth=2,relief=GROOVE,background='white')
particules.grid(column=1,row=1)
pression=Canvas(fenetre,width=400,height=400,borderwidth=2,relief=GROOVE,background='white')
pression.grid(column=2,row=1)
zone_bouton=Canvas(fenetre,width=800,height=60)
zone_bouton.grid(column=0,row=3,columnspan=2,pady=(10))
Button(zone_bouton, text='Réinitialiser', width=10,height=2,background='grey').grid(column=1,row=1)
Button(zone_bouton, text='Quitter', width=10,height=2,background='grey',command=fenetre.destroy).grid(column=2,row=1)
#canvas.pack()
fenetre.mainloop()
和2个图
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.figure import Figure
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.animation as animation
from matplotlib.animation import FuncAnimation
c_cube = input("Donnez le côté de l'enceinte :")
n_part = input("Donnez le nombre de particules :")
dt = input("Donnez l'intervale de temps δt de déplacement :")
module_v = input("Donnez la vitesse initiale (module) :")
m_part = input("Donnez la masse des particules :")
x = np.random.uniform(0,int(c_cube),int(n_part))
y = np.random.uniform(0,int(c_cube),int(n_part))
z = np.random.uniform(0,int(c_cube),int(n_part))
teta = np.random.uniform(0,2*np.pi,int(n_part))
sin_teta= np.sin(teta)
cos_teta= np.cos(teta)
phi = np.random.uniform(0,2*np.pi,int(n_part))
sin_phi = np.sin(phi)
cos_phi = np.cos(phi)
vx = int(module_v)*sin_teta*cos_phi
vy = int(module_v)*sin_teta*sin_phi
vz = int(module_v)*cos_teta
dx = vx*float(dt)
dy = vy*float(dt)
dz = vz*float(dt)
fig1= plt.Figure(figsize=(5, 3), dpi=112)
ax1 = fig1.add_subplot(111, projection='3d')
ax1.axes.xaxis.set_ticks([])
ax1.axes.yaxis.set_ticks([])
ax1.axes.zaxis.set_ticks([])
ax1.scatter(x, y, z, c='r', depthshade=False, marker='o')
fig2= plt.Figure(figsize=(3, 2), dpi=112)
fig2.set_facecolor('gray')
ax2 = fig2.add_subplot(111)
ax2.scatter(x, y, c='r', marker='o')
ax2.axes.xaxis.set_ticks([])
ax2.axes.yaxis.set_ticks([])
ax2.set_xlabel('temps')
ax2.set_ylabel('pression')
有什么主意吗? 谢谢