Я пишу свою первую Gui игру, и у меня возникают проблемы с виджетами - PullRequest
0 голосов
/ 06 мая 2020

Я пишу текстовую игру, в которой вам нужно ввести столько случайно сгенерированных (из файла) слов за 60 секунд. В настоящее время у меня есть рабочий таймер, но мой виджет ввода ничего не делает. Я должен иметь возможность нажимать ввод в моем виджете ввода, и если слово внутри равно сгенерированному слову, оценка повышается. Поле также должно быть очищено, однако оно также не делает этого.

def game(*args):
    if timer == 60: # Starts the timer and calls the words function
        countdown()
    words()


def words():
    global score
    global timer

    if timer > 0:
        entry.focus_set()  # Activate the entry box
        word = str(random.choice(word_list[0]))
        word_label.config(text=word)
        if entry.get().lower() == word.lower():
            score += 1
            entry.delete(0, 9999999)
    if timer == 0:
        results(score)


def countdown():
    global timer

    if timer > 0:
        timer -= 1
        # Update the time left label
        time_label.config(text="Time left: " + str(timer))

        # Run the function again after 1 second
        time_label.after(1000, countdown)

Это основные задействованные функции.

# Gui
root = Tk()
root.title("Text Typers")

# Create the top frame
top_frame = ttk.LabelFrame(root, text="Menu:")
top_frame.grid(row=0, column=0, padx=10, pady=10, sticky="NSEW")

# Play button
play_button = ttk.Button(top_frame, text="Play", command=game)
play_button.grid(row=5, column=0, columnspan=2, padx=10, pady=10)

# Timer
time_label = ttk.Label(top_frame, text="Time left: " + str(timer))
time_label.grid(row=6, column=0, columnspan=2, padx=10, pady=10)

# Entry function
entry = ttk.Entry(root)
entry.grid(row=8, column=0)


# Word label
word_label = ttk.Label(root, font=20)
word_label.grid(row=7, column=0, padx=10, pady=10)

root.mainloop()

Это весь соответствующий код GUI. Что-то пролетело у меня над головой? Изменить: после дополнительного тестирования кажется, что код даже не запускается в части 'if entry', потому что функция таймера работает и препятствует правильной работе функции слов?

1 Ответ

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

Если вы хотите проверить слово при нажатии клавиши ВВОД, вы можете добавить событие прослушивания клавиш, вот как я бы это сделал:

def key_press(event):
     #here you would put your function for checking the word
     print "key_press", repr(event.char)

Затем на вашем root:

frame = tkinter.Frame(root)
frame.bind("<KeyRelease-enter>", key_press)
frame.pack
...