Python Forum
Thread Rating:
  • 2 Vote(s) - 2 Average
  • 1
  • 2
  • 3
  • 4
  • 5
TKinter Hangman Game
#1
On my mission to become a python master, a friend suggested that I make a hangman game with a tkinter GUI. I somehow managed to get stuck, as my code just loops to infinity. Any tips?
from tkinter import *
import random
import sys

words = ["MrBlake", "cat"]

sword = random.choice(words)
guesses = 10
word = ("-"*len(sword))


class Application(Frame):
    """ GUI application which can retrieve an auto number to guess. """ 
    def __init__(self, master):
        """ Initialize the frame. """
        Frame.__init__(self, master)
        self.grid()
        self.create_widgets()

    def create_widgets(self):
        """ Create button, text, and entry widgets. """

        """ Instruction Label """

        # Create instruction label for Program
        self.inst_lbl = Label(self, text = "Welcome to Guess the Word!")
        self.inst_lbl.grid(row = 0, column = 0, columnspan = 2, sticky = W)

        """ Guess Input """ 

        # Create label for entering Guess  
        self.guess_lbl = Label(self, text = "Enter your Guess:")
        self.guess_lbl.grid(row = 2, column = 0, sticky = W)

        # Create entry widget to accept Guess  
        self.guess_ent = Entry(self)
        self.guess_ent.grid(row = 2, column = 1, sticky = W)

        # Create a space  
        self.gap1_lbl = Label(self, text = " ")
        self.gap1_lbl.grid(row = 3, column = 0, sticky = W)

        """ Submit Button """
        
        # Creating a submit button
        self.submit_bttn = Button(self, text = "Submit", command = self.reveal)
        self.submit_bttn.grid(row = 6, column = 0, sticky = W)

        # Create a space  
        self.gap2_lbl = Label(self, text = " ")
        self.gap2_lbl.grid(row = 7, column = 0, sticky = W)

        """ RESET """
        
        # Creating a reset button
        self.reset_bttn = Button(self, text = "Reset", command = self.reset)
        self.reset_bttn.grid(row = 6, column = 1, sticky = W)

        """ Display """

        # Create text widget to display welcome_msg
        self.display1_txt = Text(self, width = 45, height = 1, wrap = WORD)
        self.display1_txt.grid(row = 8, column = 0, columnspan = 2, sticky = W)

        # Create text widget to display guess_msg
        self.display2_txt = Text(self, width = 45, height = 1, wrap = WORD)
        self.display2_txt.grid(row = 9, column = 0, columnspan = 2, sticky = W)

        # Create text widget to display result_msg
        self.display3_txt = Text(self, width = 45, height = 2, wrap = WORD)
        self.display3_txt.grid(row = 10, column = 0, columnspan = 2, sticky = W)

        # Create text widget to display tries_msg
        self.display4_txt = Text(self, width = 45, height = 2, wrap = WORD)
        self.display4_txt.grid(row = 11, column = 0, columnspan = 2, sticky = W)
        
        # Create text widget to display word_msg
        self.display5_txt = Text(self, width = 45, height = 2, wrap = WORD)
        self.display5_txt.grid(row = 12, column = 0, columnspan = 2, sticky = W)
        
    def reveal(self):
        global words
        global sword
        global word
        guesses = 10
        letter = self.guess_ent.get()
        while guesses != 0:
            for i in range(0, 1):
                word_msg = word
                tries_msg = guesses
                welcome_msg = "Welcome!"
                guess_msg = letter
                print(letter)
                for i in range (0, len(sword)):
                    if sword[i] == letter:
                        temp = i
                        word = word[:temp] + letter +word[temp+1:]
                        word_msg = word
                    if word == sword:
                        result_msg = "Congratulations! You win!"
                    if letter not in sword:
                        guesses = guesses - 1
                        result_msg = "incorrect"
                    if guesses == 0:
                        result_msg = "G A M E  O V E R"
        # Display
        self.display1_txt.delete(0.0, END)
        self.display1_txt.insert(0.0, welcome_msg)
        self.display2_txt.delete(0.0, END)
        self.display2_txt.insert(0.0, guess_msg)
        self.display3_txt.delete(0.0, END)
        self.display3_txt.insert(0.0, result_msg)
        self.display4_txt.delete(0.0, END)
        self.display4_txt.insert(0.0, tries_msg)
        self.display5_txt.delete(0.0, END)
        self.display5_txt.insert(0.0, word)
        Tk.update(self)
    def reset(self):
        global tries
        self.display4_txt.delete(0.0, END)
        self.display3_txt.delete(0.0, END)
        self.display2_txt.delete(0.0, END)
        self.display1_txt.delete(0.0, END)

# Main manager
root = Tk()
root.title("Guessing Game")
root.geometry("300x225")
app = Application(root)
Moderator sparkz_alot:
added code tags for you this time. in the future refer to the Help Doc
Reply
#2
(Apr-02-2017, 02:45 PM)Bumble Wrote: letter = self.guess_ent.get()
while guesses != 0:

You read the user's guess before entering the while loop, and then never check it again. Which is a problem, because you continue to loop until guesses == 0, while you also only decrease guesses if it's an invalid choice, so if they guess a correct letter, the loop will never end.
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  Python Hangman Game - Multiple Letters Problem t0rn 4 4,697 Jun-05-2020, 11:27 AM
Last Post: t0rn
  Hangman metro17 4 3,024 Sep-18-2019, 10:59 AM
Last Post: perfringo
  Trouble coding hangman Tay 1 2,370 Mar-28-2019, 01:57 AM
Last Post: ichabod801
  Hangman code problem KrakowKid 1 2,407 Feb-25-2019, 06:29 PM
Last Post: ichabod801
  Python hangman help A1395 11 7,179 Feb-13-2019, 04:24 PM
Last Post: ichabod801
  Hangman 2skywalkers 3 71,358 Oct-19-2018, 01:49 PM
Last Post: ichabod801
  Hangman Help. 2skywalkers 4 4,203 Jun-26-2018, 02:49 AM
Last Post: ichabod801
  Python Hangman Replacing "_" with letters. 2skywalkers 6 12,091 Jun-25-2018, 12:01 PM
Last Post: gruntfutuk
  Simple Hangman Game Issue andrew95 2 4,356 Apr-02-2018, 02:24 PM
Last Post: andrew95
  Designing Hangman game spacetimeguy 2 5,141 Feb-02-2018, 08:55 PM
Last Post: spacetimeguy

Forum Jump:

User Panel Messages

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