2017-12-03 13 views
0

私がプログラムを実行すると、まず入力を入力するまで待ってからサウンドが再生され、画像が表示されます。なぜこれを順不同でやっているのですか?Python関数が間違った順序で実行されますが、なぜですか?

from tkinter import * 
import winsound 

main = Tk() 
main.state('zoomed') 
main.geometry("1366x768") 

# Displays a gif. 
def show(): 
    dollar_canvas = Canvas(width=50, height=50, bg='lightgrey', highlightthickness=0) 
    dollar_canvas.place(x=850, y=25) 
    my_gif = PhotoImage(file='Dollar50x50.gif') 
    dollar_canvas.image = my_gif 
    dollar_canvas.create_image(0, 0, image=my_gif, anchor=NW) 

# Accepts an input, such as enter. 
def getinput(): 
    a = input() 

# Plays a ring sound. 
def play(): 
    winsound.PlaySound('money', winsound.SND_ALIAS) 


show() 
getinput() 
play() 

mainloop() 
+0

実行中のmainloop()がなければ、Tkinterは実際には機能しません(ウィンドウを表示するなど) –

+0

わかりません。私は下部にmainloop()を持っています。私がgetinput()行をコメントアウトすると、まだ実行されますが、ドル記号gifを表示する前にサウンドが再生されます。私はこれらを順番に実行したい。なぜそれは最初に音を演奏するのですか? – RAPTORp

+0

私の知らないことを残念にして、私はちょうどpythonとtkinterを学び始めました。私は少し詳しく説明します:私は側で配送し、私の合計を追跡するプログラムを書いています。 6つのエントリを受け取り、合計を計算し、ファイルに書き込み、リストボックスに表示します。それは完璧に動作します...しかし、私は新しい納品記録を入力した後、「チャーチ」の音を鳴らして窓にドル記号のグラフィックを表示するのがクールだと決めました。最初に音を鳴らし、次にgifを表示します。私は最初にgifを表示し、次にサウンドを表示します。それは彼らを順不同でやっている。理由は分かりません。 – RAPTORp

答えて

1

彼らは、順不同で実行されていません。問題は、イベントループ(mainloop)が実行されるまで、tkinterには表示を更新する機会がないということです。あなたのコードでmainloopは、他の機能が終了するまで実行されません。

ディスプレイを強制的に更新するには、root.update_idletasks()に電話をかけることができます。

+0

"root.update_idletasks()"作業済み!ありがとうブライアン。私は学ぶべきことがたくさんある。 – RAPTORp

関連する問題