2016-06-02 7 views
0

ラベルを介してTkinterで2つのイメージループを同時に実行しようとしています。 Process関数を試してみましたが、最初のループから抜け出し、2番目のループを開始する方法を見つけなければなりません。そんなやり方はありますか?Tkinterで同時に2つのイメージループを実行するには

import time 
import Tkinter 
from multiprocessing import Process 

side = Tkinter.Tk() 

side.title('dice') 
side.geometry('200x200') 


def generate(x, y): 
    return ["dice/" + str(i) + '.gif' for i in range(x, y)] 

a1 = generate(1,13) 
a2 = generate(1,15) 
a3 = generate(1,17) 
a4 = generate(1,19) 
a5 = generate(1,21) 
a6 = generate(1,23) 



L1 = Tkinter.Label(side) 
L2 = Tkinter.Label(side) 
L1.pack() 
L2.pack() 


giflist_1 = list() 
giflist_2 = list() 

def anim(x): 

for i in x: 
    photo = Tkinter.PhotoImage(file= i) 
    giflist_1.append(photo) 

def anim_1(y): 
    for i in y: 
     photo = Tkinter.PhotoImage(file=i) 
     giflist_2.append(photo) 

def anim_3(): 
    for gif in giflist_2: 
     L2.config(image=gif) 
     L2.update() 
     time.sleep(0.1) 

def anim_2(): 
    for gif in giflist_1: 
     L1.config(image=gif) 
     L1.update() 
     time.sleep(0.1) 

if __name__ == '__main__': 
    p1 = Process(target=anim(a1)) 
    p2 = Process(target=anim_1(a2)) 

    p1.start() 
    p2.start() 
    p3 = Process(target = anim_2()) 
    p4 = Process(target=anim_3()) 
    p3.start() 
    p4.start() 


side.mainloop() 
+0

さまざまな星座でside.after()を使ってみましたが、同時にイメージを均等に繰り返すことはできません。 – CasperTN

+0

あなたは 'Process'関数を間違って使用しています。 'p1 = Process(target = anim、args =(a1、))'でなければなりません。また、私はあなたがまったくそれを使用しないことを強くお勧めします。 –

+0

ありがとうございます。どのようにプロセス機能なしでそれを解決することが可能ですか? – CasperTN

答えて

0

この単純なタスクには、Processを使用する必要はありません。 afterメソッドを実行することができます。 コードに基づいて、animanim_1はイメージを読み込んでいるだけなので、最初は実行できます。メソッドの後に呼び出すことができる他の2 anim関数

... 
def anim_3(gifID = 0):        # Something to track on what GIF we are currently 
    if gifID >= len(giflist_2): return    # No more gifs to display 
    L2.config(image=giflist_2[gifID]) 
    L2.update() 
    side.after(100, lambda: anim_3(gifID+1))  # Going to next GIF 

def anim_2(gifID = 0): 
    if gifID >= len(giflist_1): return 
    L1.config(image=giflist_1[gifID]) 
    L1.update() 
    side.after(100, lambda: anim_2(gifID+1))  # Number 100 means 100 milliseconds. It's equal to 0.1 seconds. 

if __name__ == '__main__': 
    anim(a1) 
    anim_1(a2) 

    side.after(100, anim_2) 
    side.after(100, anim_3) 

side.mainloop() 
+0

ありがとうございました..私の問題を解決しました – CasperTN

+0

返信文は、より複雑なプログラムの一部であるため、私の他のコードに邪魔されますが、 – CasperTN

+0

これを行う方法は常にあります。 ) –

関連する問題