2014-02-15 50 views
0

我需要知道如何在屏幕上看到使用Tkinter移动的正弦波 我已经用pygame做了这件事,但我认为使用Tkinter做起来很复杂。 我认为我需要做的第一件事就是定义一个函数,它绘制正弦波,然后定义其他函数,以便为此绘制运动。那是对的吗?还是我想错了?如何在屏幕上移动正弦波?在Tkinter中移动正弦波

,我提取matplotlib.org的代码是:

import numpy as np 
import matplotlib.pyplot as plt 
import matplotlib.animation as animation 

fig, ax = plt.subplots() 

x = np.arange(0, 2*np.pi, 0.01)  # x-array 
line, = ax.plot(x, np.sin(x)) 

def animate(i): 
    line.set_ydata(np.sin(x+i/10.0)) # update the data 
    return line, 

#Init only required for blitting to give a clean slate. 
def init(): 
    line.set_ydata(np.ma.array(x, mask=True)) 
    return line, 

ani = animation.FuncAnimation(fig, animate, np.arange(1, 200), init_func=init, interval=25, blit=True) 
plt.show() 

回答

0

我不明白“移动”,但matplotlib也最有可能被使用。

import matplotlib.pyplot as plt 

fig = plt.figure(frameon=False) 
ax = fig.add_axes([0, 0, 1, 1]) 
ax.axis('off') 

ax.plot(range(10)) 
plt.show() 
+0

我已经做matplotlib现在我想用Tkinter的为ANIMATE正弦波 –

+0

我不明白这一点。但是你可以生成一张图片列表,并在Tkinter中连续显示。但matplotlib解决方案有什么问题? –

+0

因为我需要绘制多个正弦波(七个)。我不能有任何轴或按钮,我也必须将窗口的大小更改为全屏。我只能看到正弦波,没有更多。 –

0

我终于在许多其他帖子的帮助下移动了七个正弦波。这是最终的结果:

import pygame 
import time 
import math 
import random 

canvas_width=1308 
canvas_height=720 
canvas_s=1004 

rojo=pygame.Color(255,0,0) 
verde=pygame.Color(0,255,0) 
azul=pygame.Color(0,0,255) 
amarillo=pygame.Color(255,255,0,0) 
marron=pygame.Color(85,65,0) 
morado=pygame.Color(255,0,255) 
naranja=pygame.Color(255,128,0) 
lin=pygame.Color(255,255,255) 
background_color=pygame.Color(0,0,0) 

pygame.init() 
# initialization of font module and creating a font to draw with 
pygame.font.init() 
fontdir=pygame.font.match_font('TimesNewRoman',False,False) 
myfont = pygame.font.Font(fontdir,60) 
pygame.display.set_caption("Monitor Signos Vitales") 

screen=pygame.display.set_mode((canvas_width,canvas_height)) 
screen.fill(background_color) 

surface=pygame.Surface((canvas_width,canvas_s)) 
surface.fill(background_color) 

# creating the random list and their corresponding surfaces 
random_list=[random.randrange(0,1000) for x in range(5)] 
text_list=[myfont.render(str(x),True,lin) for x in random_list] 

running=True 
while running: 
    pos=(1220,0) 
    for event in pygame.event.get(): 
     if event.type==pygame.QUIT: 
      running=False 

    surface.fill(background_color) 

    for text in text_list: 
     surface.blit(text,pos) 
     pos=(pos[0],pos[1]+180) 

    pygame.draw.line(surface, lin, (0, 90), (1004, 90)) 
    pygame.draw.line(surface, lin, (0, 180), (1004, 180)) 
    pygame.draw.line(surface, lin, (0, 270), (1004, 270)) 
    pygame.draw.line(surface, lin, (0, 360), (1004, 360)) 
    pygame.draw.line(surface, lin, (0, 450), (1004, 450)) 
    pygame.draw.line(surface, lin, (0, 540), (1004, 540)) 
    pygame.draw.line(surface, lin, (0, 630), (1004, 630)) 
    pygame.draw.line(surface, lin, (1004, 0), (1004, 720)) 
    pygame.draw.line(surface, lin, (1004, 180), (1308, 180)) 
    pygame.draw.line(surface, lin, (1004, 360), (1308, 360)) 
    pygame.draw.line(surface, lin, (1004, 540), (1308, 540)) 

    frecuency=2;frecuency0=4;frecuency1=8;frecuency2=16;frecuency3=5;frecuency4=10;frecuency5=15 
    amplitude=30 
    speed=2 
    for x0 in range(0,canvas_s): 
     y0=int((canvas_height/2)+amplitude*math.sin(frecuency*((float(x0)/canvas_s)*(2*math.pi)+(speed*time.time()))+270)-270) 
     surface.set_at((x0,y0),amarillo) 
    for x1 in range(0,canvas_s): 
     y1=int((canvas_height/2)+amplitude*math.sin(frecuency0*((float(x1)/canvas_s)*(2*math.pi)+(speed*time.time()))+180)-180) 
     surface.set_at((x1,y1),verde) 
    for x2 in range(0,canvas_s): 
     y2=int((canvas_height/2)+amplitude*math.sin(frecuency1*((float(x2)/canvas_s)*(2*math.pi)+(speed*time.time()))+90)-90) 
     surface.set_at((x2,y2),naranja) 
    for x3 in range(0,canvas_s): 
     y3=int((canvas_height/2)+amplitude*math.sin(frecuency2*((float(x3)/canvas_s)*(2*math.pi)+(speed*time.time())))) 
     surface.set_at((x3,y3),azul) 
    for x4 in range(0,canvas_s): 
     y4=int((canvas_height/2)+amplitude*math.sin(frecuency3*((float(x4)/canvas_s)*(2*math.pi)+(speed*time.time()))-90)+90) 
     surface.set_at((x4,y4),rojo) 
    for x5 in range(0,canvas_s): 
     y5=int((canvas_height/2)+amplitude*math.sin(frecuency4*((float(x5)/canvas_s)*(2*math.pi)+(speed*time.time()))-180)+180) 
     surface.set_at((x5,y5),marron) 
    for x6 in range(0,canvas_s): 
     y6=int((canvas_height/2)+amplitude*math.sin(frecuency5*((float(x6)/canvas_s)*(2*math.pi)+(speed*time.time()))-270)+270) 
     surface.set_at((x6,y6),morado) 

    screen.blit(surface,(0,0)) 
    pygame.display.flip() 

Pd积:请投票