Python Forum
[Tkinter] Grid_Destory() Not Working
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[Tkinter] Grid_Destory() Not Working
#1
Hi All,

I have the below code. Basically, the computer picks a number and the user's job is to guess the number, they have three tries. Every time they guess incorrectly they lose a life and the picture of the heart should disappear. However the first two disappear. But when it gets to heart_1 that does not disappear. Why? I have tried window_4.update() but still cant get it working as intended.

import tkinter as tk
from tkinter import *
import random
import time
from PIL import ImageTk,Image
 
 
window_4 = tk.Tk()
 
window_4.title("Game")
 
random_num = random.randint(1, 9)
print(random_num)
player_choice = 0
global lives
lives = 3
print ("You are starting with " + str(lives) + " lives")
 
def click_1():
 
    global lives
    player_choice=1
    if player_choice == random_num:
        print("Correct Guess - Well Done")
        time.sleep(1)
        print ("You had " + str(lives) + " lives left")
        time.sleep(1)
        print("The game will now terminate")
        time.sleep(3)
        window_4.destroy()
    else:
        lives = lives - 1
        if lives == 2:
            heart_3.grid_forget()
            print ("You have " + str(lives) + " lives left")
        elif lives == 1:
            heart_2 .grid_forget()
            print ("You have " + str(lives) + " lives left")
        elif lives == 0:
            heart_1.grid_forget()
            print ("GAME OVER, you have run out of your 3 lives! - Thanks for playing")
            time.sleep(3)
            window_4.destroy()
 
def click_2():
 
    global lives
    player_choice=2
    if player_choice == random_num:
        print("Correct Guess - Well Done")
        time.sleep(1)
        print ("You had " + str(lives) + " lives left")
        time.sleep(1)
        print("The game will now terminate")
        time.sleep(3)
        window_4.destroy()
    else:
        lives = lives - 1
        if lives == 2:
            heart_3.grid_forget()
            print ("You have " + str(lives) + " lives left")
        elif lives == 1:
            heart_2 .grid_forget()
            print ("You have " + str(lives) + " lives left")
        elif lives == 0:
            heart_1.grid_forget()
            print ("GAME OVER, you have run out of your 3 lives! - Thanks for playing")
            time.sleep(3)
            window_4.destroy()
 
def click_3():
 
    global lives
    player_choice=3
    if player_choice == random_num:
        print("Correct Guess - Well Done")
        time.sleep(1)
        print ("You had " + str(lives) + " lives left")
        time.sleep(1)
        print("The game will now terminate")
        time.sleep(3)
        window_4.destroy()
    else:
        lives = lives - 1
        if lives == 2:
            heart_3.grid_forget()
            print ("You have " + str(lives) + " lives left")
        elif lives == 1:
            heart_2 .grid_forget()
            print ("You have " + str(lives) + " lives left")
        elif lives == 0:
            heart_1.grid_forget()
            print ("GAME OVER, you have run out of your 3 lives! - Thanks for playing")
            time.sleep(3)
            window_4.destroy()
 
def click_4():
 
    global lives
    player_choice=4
    if player_choice == random_num:
        print("Correct Guess - Well Done")
        time.sleep(1)
        print ("You had " + str(lives) + " lives left")
        time.sleep(1)
        print("The game will now terminate")
        time.sleep(3)
        window_4.destroy()
    else:
        lives = lives - 1
        if lives == 2:
            heart_3.grid_forget()
            print ("You have " + str(lives) + " lives left")
        elif lives == 1:
            heart_2 .grid_forget()
            print ("You have " + str(lives) + " lives left")
        elif lives == 0:
            heart_1.grid_forget()
            print ("GAME OVER, you have run out of your 3 lives! - Thanks for playing")
            time.sleep(3)
            window_4.destroy()
 
def click_5():
 
    global lives
    player_choice=5
    if player_choice == random_num:
        print("Correct Guess - Well Done")
        time.sleep(1)
        print ("You had " + str(lives) + " lives left")
        time.sleep(1)
        print("The game will now terminate")
        time.sleep(3)
        window_4.destroy()
    else:
        lives = lives - 1
        if lives == 2:
            heart_3.grid_forget()
            print ("You have " + str(lives) + " lives left")
        elif lives == 1:
            heart_2 .grid_forget()
            print ("You have " + str(lives) + " lives left")
        elif lives == 0:
            heart_1.grid_forget()
            print ("GAME OVER, you have run out of your 3 lives! - Thanks for playing")
            time.sleep(3)
            window_4.destroy()
             
def click_6():
 
    global lives
    player_choice=6
    if player_choice == random_num:
        print("Correct Guess - Well Done")
        time.sleep(1)
        print ("You had " + str(lives) + " lives left")
        time.sleep(1)
        print("The game will now terminate")
        time.sleep(3)
        window_4.destroy()
    else:
        lives = lives - 1
        if lives == 2:
            heart_3.grid_forget()
            print ("You have " + str(lives) + " lives left")
        elif lives == 1:
            heart_2 .grid_forget()
            print ("You have " + str(lives) + " lives left")
        elif lives == 0:
            heart_1.grid_forget()
            print ("GAME OVER, you have run out of your 3 lives! - Thanks for playing")
            time.sleep(3)
            window_4.destroy()
 
def click_7():
 
    global lives
    player_choice=7
    if player_choice == random_num:
        print("Correct Guess - Well Done")
        time.sleep(1)
        print ("You had " + str(lives) + " lives left")
        time.sleep(1)
        print("The game will now terminate")
        time.sleep(3)
        window_4.destroy()
    else:
        lives = lives - 1
        if lives == 2:
            heart_3.grid_forget()
            print ("You have " + str(lives) + " lives left")
        elif lives == 1:
            heart_2 .grid_forget()
            print ("You have " + str(lives) + " lives left")
        elif lives == 0:
            heart_1.grid_forget()
            print ("GAME OVER, you have run out of your 3 lives! - Thanks for playing")
            time.sleep(3)
            window_4.destroy()
 
def click_8():
 
    global lives
    player_choice=8
    if player_choice == random_num:
        print("Correct Guess - Well Done")
        time.sleep(1)
        print ("You had " + str(lives) + " lives left")
        time.sleep(1)
        print("The game will now terminate")
        time.sleep(3)
        window_4.destroy()
    else:
        lives = lives - 1
        if lives == 2:
            heart_3.grid_forget()
            print ("You have " + str(lives) + " lives left")
        elif lives == 1:
            heart_2 .grid_forget()
            print ("You have " + str(lives) + " lives left")
        elif lives == 0:
            heart_1.grid_forget()
            print ("GAME OVER, you have run out of your 3 lives! - Thanks for playing")
            time.sleep(3)
            window_4.destroy()
 
def click_9():
 
    global lives
    player_choice=9
    if player_choice == random_num:
        print("Correct Guess - Well Done")
        time.sleep(1)
        print ("You had " + str(lives) + " lives left")
        time.sleep(1)
        print("The game will now terminate")
        time.sleep(3)
        window_4.destroy()
    else:
        lives = lives - 1
        if lives == 2:
            heart_3.grid_forget()
            print ("You have " + str(lives) + " lives left")
        elif lives == 1:
            heart_2 .grid_forget()
            print ("You have " + str(lives) + " lives left")
        elif lives == 0:
            heart_1.grid_forget()
            print ("GAME OVER, you have run out of your 3 lives! - Thanks for playing")
            time.sleep(3)
            window_4.destroy()
     
label_instructions = tk.Label(text="The computer has chosen a number, your job is to correctly guess the number. You only have 3 tries, Good Luck!")
label_instructions.grid(row=0, column = 2)
 
game_button_1 = tk.Button(text="1", height=1, width=2, command=click_1)
game_button_1.grid(row=1, column = 1)
 
game_button_2 = tk.Button(text="2", height=1, width=2, command=click_2)
game_button_2.grid(row=1, column = 3)
 
game_button_3 = tk.Button(text="3", height=1, width=2, command=click_3)
game_button_3.grid(row=1, column = 5)
 
clear_label_1=tk.Label(text=" ")
clear_label_1.grid(row=2, column=1)
 
game_button_4 = tk.Button(text="4", height=1, width=2, command=click_4)
game_button_4.grid(row=3, column = 1)
 
game_button_5 = tk.Button(text="5", height=1, width=2, command=click_5)
game_button_5.grid(row=3, column = 3)
 
game_button_6 = tk.Button(text="6", height=1, width=2, command=click_6)
game_button_6.grid(row=3, column = 5)
 
clear_label_2=tk.Label(text=" ")
clear_label_2.grid(row=4, column=1)
 
game_button_7 = tk.Button(text="7", height=1, width=2, command=click_7)
game_button_7.grid(row=5, column = 1)
 
game_button_8 = tk.Button(text="8", height=1, width=2, command=click_8)
game_button_8.grid(row=5, column = 3)
 
game_button_9 = tk.Button(text="9", height=1, width=2, command=click_9)
game_button_9.grid(row=5, column = 5)
 
 
heart_1 = Canvas(window_4, width = 300, height = 300)  
heart_1.grid(row=6, column=2)
img_1 = ImageTk.PhotoImage(Image.open("D:\Work\School\ComputerScience\Code\Other\pic_1.png"))  
heart_1.create_image(20, 20, anchor=NW, image=img_1) 
 
heart_2 = Canvas(window_4, width = 300, height = 300)  
heart_2.grid(row=6, column=3)
img_2 = ImageTk.PhotoImage(Image.open("D:\Work\School\ComputerScience\Code\Other\pic_2.png"))  
heart_2.create_image(20, 20, anchor=NW, image=img_2)
 
heart_3 = Canvas(window_4, width = 300, height = 300)  
heart_3.grid(row=6, column=4)
img_3 = ImageTk.PhotoImage(Image.open("D:\Work\School\ComputerScience\Code\Other\pic_3.png"))  
heart_3.create_image(20, 20, anchor=NW, image=img_3) 
 
window_4.mainloop()
Reply
#2
Please help with line numbers.
Also, your title suggests that you are trying to destroy 'grid'
you destroy windows and widgets, not grid
Reply
#3
grid_forget, not grid_destory. The problem is caused by time.sleep() blocking mainloop from updating the windows.

This is a double post. Also posted under General Coding Help. Don't do that finndude
Reply


Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020