преобразование Python Hangman в GUI - PullRequest
0 голосов
/ 06 мая 2018

Я работаю с нашим проектом по созданию слова гадания. но у меня проблема с петлями и буквами, которые нужно добавить на labelGuessResult. Пожалуйста, помогите мне решить мои коды и помогите мне понять, в чем проблема с моими кодами. результат, который я хотел бы получить, - это правильные угаданные буквы, которые отображаются в labelGuessResult, и каждый раз, когда я ввожу правильное предположение, оно будет добавляться вот так: s _ren.

from tkinter import *
import tkinter.messagebox
from random import choice
randomWords = choice(["yeti", "siren", "lich"])
lives = 7
guessedWord = []
guessedWrong = []

#defining the main class
class window(Frame):
#defining main window initialization
def __init__(self, master=None):

    Frame.__init__(self, master)
    self.master = master
    self.init_window()

#defining main frame
def init_window(self):

    self.master.title("H A N G M A N")
    self.master.resizable(False, False)
    self.pack(fill=BOTH, expand=1)


    self.label1 = Label(self, text="Guessed the %s letter word: " % (len(randomWords)))
    self.label1.grid(row=1, column=1, ipadx=5, ipady=5, sticky=W)

    '''DISPLAY WORD'''
    self.labelGuessResult = Label(self, text=len(randomWords)* " _")
    self.labelGuessResult.grid(row=1, column=2)

    '''GUESS INPUT'''
    self.guessEnt = Entry(self)
    self.guessEnt.grid(row=1, column=3)
    guess = self.guessEnt.get()


    self.label2 = Label(self, text="Message: ")
    self.label2.grid(row=2, column=1, ipadx=5, ipady=5, sticky=W)
    self.labelMessage = Label(self, text=guessedWord + guessedWrong)
    self.labelMessage.grid(row=2, column=2)

    self.label3 = Label(self, text="Guessed Letters: ")
    self.label3.grid(row=3, column=1, ipadx=5, ipady=5, sticky=W)
    self.lblGuessed = Label(self, text=guessedWord)
    self.lblGuessed.grid(row=3, column=2)

    self.label4 = Label(self, text="Lives left: ")
    self.label4.grid(row=4, column=1, ipadx=5, ipady=5, sticky=W)
    self.lblLives = Label(self, text=lives)
    self.lblLives.grid(row=4, column=2)

    def checkWord():
        while True:
            out = ""
            for letter in randomWords:
                if letter in guessedWord:
                    self.labelGuessResult.config(text=out+letter)
                else:
                    self.labelGuessResult.config(text=out+" _")
            if out == randomWords:
                self.labelMessage.config("You have guesed the ", randomWords)
                break
            if guess in guessedWord:
                self.labelMessage.config(text="already guessed that!")
            elif guess in randomWords:
                self.labelMessage.config(text="correct!")
                guessedWord.append(guess)
            else:
                self.labelMessage.config(text="Wrong!")
                guessedWrong.append(guess)
            print()

    '''BUTTON GUESS'''
    self.submitBTN = Button(self, text="Guess", command=checkWord)
    self.submitBTN.grid(row=1,column=4)


frames = Tk()              #creates the frame
frames.geometry("500x450") #sets frame size
app = window(frames)       #calls and runs the frame within the class
frames.mainloop()          #runs the frame continuously

1 Ответ

0 голосов
/ 06 мая 2018

Что ж, одной из основных проблем является функция checkWord(). Когда вы в первый раз вызываете эту функцию, она запускает цикл, который мне трудно понять и который, похоже, не заканчивается.

Это означает, что как только вы наберете checkWord(), вы не сможете вводить больше букв в запись.

Я предлагаю вам сначала составить блок-схему процедуры угадывания и проверки, а затем реализовать ее постепенно, проверяя, что вы получите правильный результат. Для начала может быть проще пропустить графический интерфейс, потому что он просто добавляет сложности, пока вы не заставите его работать.

...