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

Tkinter实现Wordle时标签显示异常(含重复字母问题)

法语版6字母Wordle(Tkinter)字母颜色显示异常问题

我是Python初学者,首次尝试用Tkinter开发6字母法语版Wordle。此前已完成纯Python版本,现在做可视化界面时遇到问题:猜词后字母标签无法正确显示颜色(绿色代表位置正确、黄色代表字母存在但位置错误、灰色代表字母不存在)。

我通过result数组(初始为['x','x','x','x','x','x'])标记状态:先遍历匹配正确位置设为'o',再处理错位设为'+'以兼容重复字母,但测试时输入“voisin”出现第二个i消失、仅最后一个字母标签变色、N从黄色变灰色的异常情况。

附上代码:

from tkinter import *
from tkinter import messagebox
import random 

lexique = []
def lire_lexique(fichier) :
    with open(fichier, mode="r",encoding='utf-8') as flux:
        global lexique
        for ligne in flux:
            lexique.append(ligne.strip("\n"))
        return lexique
lire_lexique("lexique.txt")
secret = str(random.choice(lexique))
secretresult = secret

root = Tk()

root.title("Wordle")


green = "#6ca965"
yellow = "#c8b653"
gray = "#787c7f"
black = "#000000"
white = "#FFFFFF"

root.config(bg=black)

guessnum = 1

wordInput = Entry(root)
wordInput.grid(row=999, column=0, padx=10, pady=10, columnspan=3)


def getGuess():

    global secret
    proposition = wordInput.get()

    global guessnum
    guessnum += 1
    
    if guessnum <= 6:
        if proposition not in lexique :
            messagebox.showerror("pas dans le lexique","ce mot n'est pas dans le lexique, veuillez réessayer")
        if proposition in lexique and len(proposition) == 6:    
            
            if secret == proposition: 
                messagebox.showinfo("correct!", f"correct! the word was {secret.title()}")
                
            for letter in proposition :  
                    label = Label(root, text=letter.upper())
                    label.grid(row=guessnum, column=proposition.index(letter), padx=10, pady=10)      
            else: 
                result = ["x"] * 6  

                for index, (letter, letter2) in enumerate(zip(proposition, secret)):   
                    if letter == letter2:
                        result[index] = "o" 
                        secret = secret.replace(letter, "x", 1)
                for index, (letter, letter2) in enumerate(zip(proposition, secret)):
                    if letter in secret and  result[index] == "x":
                        result[index] = "+"
                        secret = secret.replace(letter, "x", 1)
        
                for char in result : 
                    if char == "+" :
                        label.config(bg=black, fg=yellow)
                    elif char == "x" :
                        label.config(bg=black, fg=gray)
                    elif char == "o":
                        label.config(bg=black, fg=green) 

        elif len(proposition) < 6 or len(proposition) > 6:
            messagebox.showerror("Veuillez entrer un mot de 6 lettres", "Le mot doit être un mot de 6 lettres")
    
    else:
        messagebox.showerror("C'est perdu", f"C'est perdu ! Le mot était {secretresult}")


wordGuessButton = Button(root, text="Guess", command=getGuess)
wordGuessButton.grid(row=999, column=3, columnspan=2)


root.mainloop()

我知道问题出在标签、result变量、循环的处理逻辑上,但无法精确定位,希望得到帮助。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 23:17:44