Ошибка в программе угадай число

я решил написать программу "угадай число" на Python. Вот код:

from tkinter import *
from tkinter import messagebox

import random
num = random.randint(1,100)
def guess(entry):
    while True:
        guess = entry.get()
        i = int(guess)
        if i == num:
            messagebox.showinfo("Ваш ответ", "Правильно!")
            break
        elif i > num:
            messagebox.showinfo("Ваш ответ", "Загаданное число меньше")
        elif i < num:
            messagebox.showinfo("Ваш ответ", "Загаданное число больше")
tk = Tk()
tk.title("Угадай число")
text = Label(tk,text="Введите число от 1 до 100")
text.pack()
num1 = IntVar()
entry = Entry(tk,width=50,textvariable=num1)
entry.pack()
btn = Button(tk,text="Отправить",command=guess)
btn.pack()
tk.resizable(0,0)
tk.wm_attributes("-topmost",1)
canvas = Canvas(tk,width=400,height=300,bd=0,highlightthickness=0)
canvas.pack()

Но выдаёт ошибку:

Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Program Files (x86)\Python37-32\lib\tkinter\__init__.py", line 1705, in __call__
return self.func(*args)
TypeError: guess() missing 1 required positional argument: 'entry'

Я перевёл ошибку, но не понимаю как это исправить.


Ответы (2 шт):

Автор решения: Andy Pavlov

Немного поправил код. Вроде теперь как-то работает. Убрал цикл внутри guess(). Он там не нужен, т.к. делает бесконечный цикл на первом вводе. Плюс убрал в guess() переменную entry.

from tkinter import *
from tkinter import messagebox

import random
num = random.randint(1,100)
def guess():
    #while True:
    val = entry.get()
    i = int(val)
    if i == num:
        messagebox.showinfo("Ваш ответ", "Правильно!")
    elif i > num:
        messagebox.showinfo("Ваш ответ", "Загаданное число меньше")
    elif i < num:
        messagebox.showinfo("Ваш ответ", "Загаданное число больше")
tk = Tk()
tk.title("Угадай число")
text = Label(tk,text="Введите число от 1 до 100")
text.pack()
num1 = IntVar()
entry = Entry(tk,width=50,textvariable=num1)
entry.pack()
btn = Button(tk,text="Отправить",command=guess)
btn.pack()
tk.resizable(0,0)
tk.wm_attributes("-topmost",1)
canvas = Canvas(tk,width=400,height=300,bd=0,highlightthickness=0)
canvas.pack()
tk.mainloop()
→ Ссылка
Автор решения: GoblinAndLinuxoid

Я решил это так:

from tkinter import *
from tkinter import messagebox
import random
num = random.randint(1,100)
def guess():
while True:
    guess1 = num1.get()
    i = int(guess1)
    if i == num:
        messagebox.showinfo("Ваш ответ", "Правильно!")
        break
    elif i > num:
        messagebox.showinfo("Ваш ответ", "Загаданное число меньше")
        break
    elif i < num:
        messagebox.showinfo("Ваш ответ", "Загаданное число больше")
        break
tk = Tk()
tk.title("Угадай число")
text = Label(tk,text="Введите число от 1 до 100")
text.pack()

num1 = IntVar()
entry = Entry(tk,width=50,textvariable=num1)
entry.pack()

btn = Button(tk,text="Отправить",command=guess)
btn.pack()

tk.resizable(0,0)
tk.wm_attributes("-topmost",1)
canvas = Canvas(tk,width=400,height=300,bd=0,highlightthickness=0)
canvas.pack()
→ Ссылка