Игнорирует проверку строки и сразу выводит "NO" после нажатия кнопки
from tkinter import *
from tkinter import messagebox
root = Tk()
root.title("Клавиатурный тренажер")
root.geometry("400x300")
def rule_game():
tea = StringVar()
message_entry = StringVar()
message_entry = Entry()
tea=message_entry.get()
slova = StringVar()
slova = "abcd"
if message_entry.get() == slova:
label1 = Label(text="Result", fg="#eee", bg="#333")
label1.pack()
else:
label1 = Label(text="NO", fg="#eee", bg="#333")
label1.pack()
def start_game():
message = StringVar()
play_game()
global wow_button
wow_button = Button(text="Click Me", command=rule_game)
wow_button.place(relx=.5, rely=.5, anchor="c")
def play_game():
destroy_object = [btn_1]
for object_name in destroy_object:
object_name.destroy()
message = StringVar()
message_entry = Entry(textvariable=message)
message_entry.place(relx=.5, rely=.1, anchor="c")
poetry = "abcd"
global label2
label2 = Label(text=poetry, justify=LEFT)
label2.place(relx=.3, rely=.3)
btn_1 = Button(text="start", # текст кнопки
background="#555", # фоновый цвет кнопки
foreground="#ccc", # цвет текста
padx="20", # отступ от границ до содержимого по горизонтали
pady="8", # отступ от границ до содержимого по вертикали
font="16", # высота шрифта
command=start_game
)
btn_1.pack()
root.mainloop()
Ответы (1 шт):
В этом фрагменте кода:
message_entry = Entry()
tea=message_entry.get()
slova = "abcd"
if message_entry.get() == slova:
label1 = Label(text="Result", fg="#eee", bg="#333")
label1.pack()
else:
label1 = Label(text="NO", fg="#eee", bg="#333")
label1.pack()
- вы создаете новое текстовое поле, сразу пытаетесь из него что-то прочитать, но на момент создания в текстовом поле еще пусто - пользователь физически не успеет за микросекунды между выполнением этих команд что-то ввести (к тому же, данное текстовое поле вы не размещаете в окне с помощью pack/grid/place). Дальше условие в if не выполнится, потому что пустая строка, полученная из текстового поля, не равна строке "abcd", в итоге получаете NO.
По логике, вам нужно получать данные из текстового поля message_entry, созданного в функции play_game, а не создавать новое текстовое поле. Переменная message_entry, созданная в rule_game, никак не связана с переменной message_entry в play_game. Чтобы получать данные из message_entry, созданного в play_game, нужно в этой функции объявить эту переменную глобальной (или переменную message объявить глобальной, и получать данные из нее):
def rule_game():
slova = "abcd"
if message_entry.get() == slova:
label1 = Label(text="Result", fg="#eee", bg="#333")
label1.pack()
else:
label1 = Label(text="NO", fg="#eee", bg="#333")
label1.pack()
...
def play_game():
global message_entry
...
message = StringVar()
message_entry = Entry(textvariable=message)
message_entry.place(relx=.5, rely=.1, anchor="c")
или через message:
def rule_game():
slova = "abcd"
if message.get() == slova:
label1 = Label(text="Result", fg="#eee", bg="#333")
label1.pack()
else:
label1 = Label(text="NO", fg="#eee", bg="#333")
label1.pack()
...
def play_game():
global message
...
message = StringVar()
message_entry = Entry(textvariable=message)
message_entry.place(relx=.5, rely=.1, anchor="c")