tkinter 标签无法正确显示(wordle 重复)

问题描述 投票:0回答:1

首先,我是初学者,对此我很陌生,所以请不要太严厉,即使错误真的很愚蠢或可以避免......

话虽如此,我有一个Python作业,我必须在Python中制作wordle。我确实设法让我的程序在“简单”Python 中工作,但我一直在尝试让它与 tkinter 一起工作,以获得一个漂亮的界面。这是我第一次尝试 tkinter。

现在我遇到的问题是,我一直在尝试这样做,以便如果字母放错位置,则与猜测中的每个字母相关的标签将变为黄色,如果要猜测的单词中不存在,则为灰色,如果该字母已正确放置。我检查字母位置的方法是将位置存储在“结果”变量中,默认情况下如下所示: xxxxxx ,我的代码用 o 更改 x ,第一个 for 循环用于正确的位置,第二个 for 循环for 循环它添加了缺少的+。我这样做是因为它可以解决重复的字母。

我的想法是采用结果“结果”变量(例如,让我们说“xxo + xx”并将其与我的变量“命题”中的字母进行比较,这样如果结果中有一个x,则与该字母关联的标签是灰色的,如果有 o,则标签为绿色,如果有 +,则标签为黄色。 在此输入图片描述 当我尝试测试该程序时,我有这个:(这些是法语单词) 我不知道为什么,但是当我输入“voisin”时,第二个 i 就消失了,标签仅更改最后一个字母,并且 N 从黄色变为灰色

我知道问题一定在于我处理标签、结果变量、for 循环和代码中元素顺序的方式,但我一生都找不到方法,我可以满足于该程序我已经成功完成了,但我真的想让这个简单的事情发挥作用......

这是代码:

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()
python tkinter wordle-game
1个回答
0
投票

j'ai eu 某些难以理解的问题(英语与法语),请不要重新编码 ton 脚本,只要有功能,我就可以使用。如果需要的话,请不要再不和谐了:Jamesfrench_

说出相关要点:

  1. 我可以使用美丽的循环,在循环中是可行的
  2. J'ai remarqué que des partys de script était beaucoup trop Complexe pour rien, ça peut comesr au début
  3. 我可能无法包含其中,这就是 cas,请原谅!

J'espère avoir pu t'aider

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)
root.geometry("400x250")

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()}")
            else: 
                for i in range(6):  
                    result = ["x"] * 6 
                    label = Label(root, text=proposition[i].upper())
                    label.grid(row=guessnum, column=i, padx=10, pady=10)    
                
                    if secret[i] == proposition[i]:
                        result[i] = "o"
                    elif proposition[i] in secret:
                        result[i] = "+"
                    
            
                    if result[i] == "+":
                        label.config(bg=black, fg=yellow)
                    elif result[i] == "x":
                        label.config(bg=black, fg=gray)
                    elif result[i] == "o":
                        label.config(bg=black, fg=green) 
                print(result)
        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()

PS:(j'ai pas utiliser gpt)

© www.soinside.com 2019 - 2024. All rights reserved.