I am working on the bare bones of a slot machine game for a coding class and I am running into an issue with the function I am making for the slot rolling. The FOR loop is supposed to pick a random image, wait some time, do that 3 times and then move on.
What happened was that the image only rolls after the entire loop is done. It doesn’t change the image 3 times, it changes it once after the loop is done looping. How do I get it to look like it is actually looping 3 times?
this issue is in the roll_slots function
from tkinter import *
from tkinter import ttk
import time
import random as ran
game = Tk()
game.title("Slots Game")
game.geometry('1600x800')
Mango = PhotoImage(file="Mango-PNG.png")
Banana = PhotoImage(file="Banana-Fruit-PNG.png")
Blackberry = PhotoImage(file="Blackberry-Fruit-PNG-Image.png")
Apple = PhotoImage(file="Red-Apple-PNG-HD.png")
def navigate_to_game():
menus.select(1)
# this is the meat and potatoes, this is what happens when you roll the slots
def roll_slots():
list1 = [Apple, Banana, Blackberry, Mango]
for i in range(3):
time.sleep(1)
x = ran.choice(list1)
slot1.configure(image=x)
time.sleep(1)
# a = ran.choice(list1)
# b = ran.choice(list1)
# c = ran.choice(list1)
# slot1.configure(image=a)
# slot2.configure(image=b)
# slot3.configure(image=c)
# return a, b, c
# menu creation (using the notebook widgets)
menus = ttk.Notebook(game)
mainmenu = Frame(menus)
menus.add(mainmenu, text="Main Menu")
gamemenu = Frame(menus)
menus.add(gamemenu, text="Machine")
menus.pack(expand=1, fill="both")
# main menu programming
welcome = Label(mainmenu, text="This Is The Game", font=("Terminal", 20))
welcome.pack(pady=40)
coin = PhotoImage(file="Coins.png")
mainmenucoin = Label(mainmenu, image=coin)
mainmenucoin.pack()
playgame = Button(mainmenu, text="Start Gambling!", command=navigate_to_game)
playgame.pack()
# actual gameplay coding
slotframe = Frame(gamemenu)
slotframe.pack()
slot1 = Label(slotframe, image=Mango)
slot1.pack(side=LEFT)
slot2 = Label(slotframe, image=Mango)
slot2.pack(side=LEFT)
slot3 = Label(slotframe, image=Mango)
slot3.pack(side=LEFT)
gamble = Button(gamemenu, text="gamble", command=roll_slots)
gamble.pack()
game.mainloop()
>Solution :
Modify the roll_slots() function as follows:
def roll_slots():
list1 = [Apple, Banana, Blackberry, Mango]
for i in range(3):
game.after(100)
x = ran.choice(list1)
slot1.configure(image=x)
game.after(100)
game.update()
To see the delay effect in tkinter, use game.after(ms) instead of time.sleep(1).
And update the entire window. game.after(100) #100 is 0.1s
Hope this helps.