2014-02-15 49 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積:請投票