You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Tkinter的简易Hangman GUI游戏运行异常求助

Fixing Your Tkinter Hangman Game Issues

Hey there! Let's get your Hangman game working smoothly. I've pinpointed the two key issues causing your problems, and here's how to fix them step by step:

Problem 1: lb1 Doesn’t Show Dashes Matching the Secret Word Length

Your original code overwrites lb1["text"] with a single character or dash for every letter in the secret word. This means only the last character’s state gets displayed, instead of the full string of dashes/guessed letters. We need to build a complete display string first, then assign it to the label.

Problem 2: Game Freezes When Guessing Correctly

The while loop inside lets_begin() blocks Tkinter’s main event loop. Tkinter runs on a single thread, so any long-running loop will stop the interface from updating or responding to user input. Instead, we’ll track game state with global variables and handle one guess per button click.

Fixed Code

from tkinter import * 
import random 

wlist = "monday friday sunday blue orange red brown ".split() 
sword = random.choice(wlist)

# Global variables to track game state across button clicks
guesses = ""
turns = 5

def init_game():
    """Reset game state and initialize labels"""
    global sword, guesses, turns
    sword = random.choice(wlist)
    guesses = ""
    turns = 5
    # Show initial dashes matching the secret word's length
    lb1["text"] = "-" * len(sword)
    lb2["text"] = "Days of the week\n and some colors...."

def lets_begin(): 
    global guesses, turns
    
    # Get only the first character from input (avoid multi-character guesses)
    guess = ent.get().strip().lower()[:1]
    if not guess:  # Ignore empty input
        return
    
    ent.delete(0, END)  # Clear the input field
    
    # Prevent duplicate guesses
    if guess in guesses:
        lb2["text"] = "You already guessed that character!"
        return
    
    guesses += guess
    failed = 0
    display_str = []
    
    # Build the full display string for the secret word
    for char in sword:
        if char in guesses:
            display_str.append(char)
        else:
            display_str.append("-")
            failed += 1
    
    # Update lb1 with the full state (add spaces for readability)
    lb1["text"] = " ".join(display_str)
    
    # Check win condition
    if failed == 0:
        lb2["text"] = f"You won! The word was {sword}!"
        return
    
    # Handle wrong guess
    if guess not in sword:
        turns -= 1
        lb2["text"] = f"Wrong guess! {turns} turns left."
        
        # Check game over condition
        if turns == 0:
            lb2["text"] = f"Game over! The answer was {sword}"
            lb1["text"] = sword  # Reveal the secret word

wn = Tk() 
wn.geometry("400x300+10+10") 
wn.config(bg="silver") 

# Button to start or restart the game
but1 = Button(wn, text="Play/Restart", command=init_game)
but1.place(x=20, y=95) 

ent = Entry(wn, width=12) 
ent.place(x=10, y=70) 

lb1 = Label(bg="pink", width=20, font=("Arial", 12)) 
lb1.place(x=10, y=10) 

lb2 = Label(bg="yellow", width=28, font=("Arial", 10), wraplength=200) 
lb2.place(x=110, y=5) 

# Initialize game when the app starts
init_game()

wn.mainloop()

Key Changes Explained

  • Global State Tracking: guesses and turns are now global, so their values persist between button clicks instead of resetting every time.
  • Initialization Function: init_game() sets up the initial dashes in lb1 and resets the game state when you start or restart.
  • No More Blocking Loop: Each button click handles exactly one guess, keeping Tkinter’s event loop free to update the interface and respond to input.
  • Proper Display String: We build a list of characters/dashes and join them into a full string, so lb1 shows the complete state of the secret word.
  • Improved Input Handling: We take only the first character of input, ignore empty guesses, and prevent duplicate guesses for better user experience.
  • Clearer Feedback: Labels now give explicit messages about remaining turns, duplicate guesses, and game outcomes.

内容的提问来源于stack exchange,提问作者gencoglu17

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:39:01