2016-04-13 7 views
0

私はtkinterを使うことを学んでいます。私がやったことは、コーヒーマシンに4つのボタンがあり、各ボタンが新しいウィンドウで、スライドショーのように順番に画像が表示されます。私が行ったことは、スライドショーの最後の画像だけを表示し、残りの画像は無視するので、うまくいきません。 Python 2.7では、ラベルの設定が終わるたびにコンソールに何も印刷しないで修正できましたが、動作していないようです。なぜこれが起こったのか、そして/またはそれを修正する方法を教えていただけたら、大いに感謝します。tkinter(py3) - 関数内のイメージラベルをリアルタイムで変更する

(P。私のコードはおそらく非常に醜い/非効率的であることは知っていますが、私はtkinterにはとても新しいので、実際はそれがうまくいくか気になります)。

def Latte(): 
    global Grind 
    global Hot_Water 
    global Cocoa_Poweder 
    global Steamed_Milk 
    global Foamed_Milk 
    global LattePhoto 

    MakingCoffee=Toplevel(Test, width=200, height=200) 
    MakingCoffee.wm_title("Latte") 
    MakingCoffee.iconbitmap("Photos\Latte.ico") 

    photolabel= Label(MakingCoffee,image=Grind) 
    photolabel.pack() 
    time.sleep(2) 
    photolabel.configure(image=Hot_Water) 
    time.sleep(2) 
    photolabel.configure(image=Steamed_Milk) 
    time.sleep(4) 
    photolabel.configure(image=Foamed_Milk) 
    time.sleep(1) 
    photolabel.configure(image=LattePhoto) 
    time.sleep(2) 
    MakingCoffee.destroy() 
+0

外部リソースにリンクするのではなく、コードの最も重要で関連する部分をここに掲載するのが最善でしょう。 – GMchris

+0

コードの最も重要な部分は、関数内の部分です。 –

答えて

0

ここには、この作業を行うための小さな方法があります。必要に応じて再構成することができます。リストはちょうど私が変更を示すそれを反復することができます。これらのグローバルのすべてが元のコードで必要なわけではありません。それらはすでにグローバル変数であり、再割り当てを試みていないので、これは冗長性です。少なくとも再利用できるように、コードの50%を除外することができます。これをクラスにして「ファクトリクラス」を作って、さまざまな種類のコーヒーを使ってさまざまな種類のスライドショーを作成し、globalもここで取り除くことができます。

from tkinter import * 
import tkinter 
import time 

Test = tkinter.Tk() 
Test.wm_title("Coffee Store") 
Test.resizable(0, 0) 

americano_images = [ 
    PhotoImage(file='1.gif'), 
    PhotoImage(file='2.gif'), 
    PhotoImage(file='3.gif') 
] 
AFTER = None 

AmericanoPhoto= PhotoImage(file="1.gif") 

def switch_images(im_list, label, index=0): 

    global AFTER 
    label.configure(image=im_list[index]) 
    if index != len(im_list) - 1: 
     index += 1 
    else: 
     index = 0 
    AFTER = Test.after(1000, lambda: switch_images(im_list, label, index)) 

def Americano(): 

    MakingCoffee=Toplevel(Test, width=200, height=200) 
    MakingCoffee.wm_title("Americano") 

    photolabel= Label(MakingCoffee) 
    photolabel.pack_propagate(0) 
    photolabel.pack() 
    after = switch_images(americano_images, photolabel) 
    cancel = Button(MakingCoffee, text='Kill Slideshow', 
     command=lambda: Test.after_cancel(AFTER)) 
    cancel.pack(fill=X, expand=1) 

B1= Button(Test, text='BUTTON', command=Americano) 
B1.grid(row=0,column=0) 

Test.mainloop() 
関連する問題