2017-12-03 2 views
0

Wenn ich das Programm starte, wartet es zuerst, bis ich Eingabe eintrage, dann wird es den Ton spielen, dann zeigt es das Fenster mit meinem Bild an. Warum macht es das nicht in Ordnung?Python-Funktionen werden in falscher Reihenfolge ausgeführt, warum?

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

Ohne eine laufende 'Hauptschleife()' Tkinter funktioniert nicht wirklich (wie zeigt Windows, etc.) –

+0

Nicht sicher, dass ich verstehe. Ich habe die Hauptschleife() an der Unterseite. Wenn ich die getinput() Zeile wegkomment, läuft sie immer noch, aber spielt den Sound ab, bevor das Dollarzeichen gif angezeigt wird. Ich möchte, dass diese der Reihe nach ausgeführt werden. Warum spielt es zuerst den Ton? – RAPTORp

+0

Entschuldigung für meine Ignoranz, ich habe gerade angefangen, Python und Tkinter zu lernen. Ich werde ein wenig ausarbeiten: Ich mache nebenbei Lieferungen und schreibe ein Programm, um meine Summen zu verfolgen. Er akzeptiert sechs Einträge, berechnet Summen, schreibt sie in eine Datei und zeigt sie in einer Listbox an. Es funktioniert perfekt ... aber dann ... Ich entschied, dass es cool wäre, einen "cha-ching" Sound zu spielen und eine Dollarzeichen-Grafik auf dem Fenster anzuzeigen, nachdem ich einen neuen Lieferrekord eingegeben habe. Es spielt zuerst den Ton und zeigt dann das gif. Ich möchte, dass das Gif zuerst erscheint, dann der Sound. Es macht sie außer Betrieb. Nicht sicher warum. – RAPTORp

Antwort

1

Sie laufen nicht außer Betrieb. Werfen Sie ein paar print-Anweisungen ein, um die Reihenfolge zu sehen, in der sie ausgeführt werden. Das Problem ist, dass tkinter bis zur Ausführung der Ereignisschleife (mainloop) keine Gelegenheit hat, die Anzeige zu aktualisieren. In Ihrem Code wird mainloop nicht ausgeführt, bis die anderen Funktionen beendet sind.

Um zu erzwingen, dass die Anzeige aktualisiert wird, können Sie root.update_idletasks() anrufen.

+0

"root.update_idletasks()" Gearbeitet! Vielen Dank Bryan. Mann, ich muss viel lernen. – RAPTORp

Verwandte Themen