Вы собрали случайные строки кода не по порядку.Например, root.mainloop()
должен вызываться только один раз после настройки кода, но вы вызываете его в середине main()
, так что все после не будет выполняться, пока Tk не будет разрушен.И цикл while guess != randomnum:
не имеет места в коде, управляемом событиями.И этому, как бы то ни было, действительно должен предшествовать комментарий:
randomnum = float(decimal.Decimal(random.randrange(100,10000))/100)
Давайте возьмем более простой и понятный подход.Вместо того чтобы держаться за указатели на различные виджеты, давайте использовать их свойства textvariable
и command
, чтобы запустить шоу и игнорировать виджеты после установки.Мы будем использовать StringVar
и IntVar
для обработки ввода и вывода.И вместо использования sleep()
, который отбрасывает наши события, мы будем использовать функцию after()
:
import tkinter as tk
from random import randint
def get():
number = guess.get()
if number < random_number:
hint.set("Higher!")
root.after(1000, clear_hint)
elif number > random_number:
hint.set("Lower!")
root.after(1000, clear_hint)
else:
hint.set("Well guessed!")
root.after(5000, setup)
def setup():
global random_number
random_number = randint(1, 100)
guess.set(0)
hint.set("Start Guessing!")
root.after(2000, clear_hint)
def clear_hint():
hint.set("")
root = tk.Tk()
hint = tk.StringVar()
guess = tk.IntVar()
random_number = 0
tk.Entry(textvariable=guess).grid(column=0, row=0)
tk.Button(root, text="Guess", command=get).grid(column=1, row=0)
tk.Label(root, textvariable=hint).grid(column=0, row=1)
setup()
root.mainloop()