2016-03-28 8 views
1

私は、スライダを使用して画像のアニメーションの速度を制御したいです。だから私は次のことをしようとしている代わりに、私はスライダを変更すると、同じキャンバス上に再現多くの画像を取得します。私は、スライダを使って、ある画像と次の画像との時間間隔を変えたいと思っています。PythonのTkinterのSliderコントロール

from tkinter import * 
#import tkFont 
import random 
from time import sleep 
root = Tk() 

class App: 

    def __init__(self, master): 
     frame = Frame(master) 
     frame.pack() 
     scale = Scale(frame, from_=0, to=100, command=self.update) 
     scale.grid(row=0) 

    def update(self, duty): 

     #Importing the images. They are named a1.gif, a2.gif...a7.gif 
     frame=[] 
     for i in range(1,10): 
      fname="CORE\\a"+str(i)+".gif" 
      frame+=[PhotoImage(file=fname)] 
     wrap = Canvas(root, width=200, height=140) 
     wrap.pack() 

     def do_animation(currentframe): 
       def do_image(): 
         wrap.create_image(100,70,image=frame[currentframe], tag='ani') 
       # Delete the current picture if one exists 
       wrap.delete('ani') 
       try: 
         do_image() 
       except IndexError: 
         # End of image list reached, start over at the first image 
     #- works for an arbitrary number of images 
         currentframe = 0 
         do_image() 
       wrap.update_idletasks() #Force redraw 
       currentframe = currentframe + 1 
       # Call myself again to keep the animation running in a loop 
       root.after(100, do_animation, currentframe) 
     # Start the animation loop just after the Tkinter loop begins 
     root.after(100, do_animation, 0) 

app = App(root) 
#app.geometry("800x480") 
root.mainloop() 
python 

答えて

2

新しいキャンバスを作成するたびに、スライダーから速度を使用しないでください。私はこれがあなたが望むものだと思います。驚くべきことだ

from tkinter import * 
#import tkFont 
import random 
from time import sleep 
root = Tk() 

class App: 

    def __init__(self, master): 
     frame = Frame(master) 
     frame.pack() 
     self.scale = Scale(frame, from_=0, to=1000) 
     self.scale.grid(row=0) 
     self.wrap = Canvas(root, width=200, height=140) 
     self.wrap.pack() 
     self.update() 

    def update(self): 

     #Importing the images. They are named a1.gif, a2.gif...a7.gif 
     frame=[] 
     for i in range(1,10): 
      fname="CORE\\a"+str(i)+".gif" 
      frame+=[PhotoImage(file=fname)] 

     def do_animation(currentframe): 

      def do_image(): 

       self.wrap.create_image(100,70,image=frame[currentframe], tag='ani') 
      # Delete the current picture if one exists 
      self.wrap.delete('ani') 
      try: 
       do_image() 
      except IndexError: 
       # End of image list reached, start over at the first image 
       #- works for an arbitrary number of images 
       currentframe = 0 
       do_image() 
      self.wrap.update_idletasks() #Force redraw 
      currentframe = currentframe + 1 
      # Call myself again to keep the animation running in a loop 
      root.after(self.scale.get(), do_animation, currentframe) 
     # Start the animation loop just after the Tkinter loop begins 
     root.after(100, do_animation, 0) 

app = App(root) 
#app.geometry("800x480") 
root.mainloop() 
+0

が、それは動作しますが、どうもありがとうございました。私はどこが間違っているのか理解している。 –

関連する問題