我正在尝试做一个简单的数学运算,但它给了我一个错误

问题描述

我正在尝试做一个简单的数学运算,当你给出正确答案时,它会说“正确”,而当你答错时,它会说“错误”;但是,它给出了一个错误

Tkinter 回调中的异常 回溯(最近一次调用最后一次): 文件“C:\Users\yu.000\AppData\Local\Programs\Python\python38-32\lib\tkinter_init_.py”,第 1883 行,调用 返回 self.func(*args) 类型错误:check() 缺少 1 个必需的位置参数:'entry'

这是代码

import tkinter as tk

import tkinter.messageBox as tkm

window = tk.Tk()

window.title('my tk')

window.geometry('550x450')

def math1():

    e = tk.Tk()

    e.geometry('200x150')

    tk.Label(e,text = '10',height = 2).pack()

    tk.Label(e,text = '+ 12',height = 2).place(x=80,y=25)

    er = tk.StringVar()

    def check(entry):

        if entry == 22:

            tkm.showinfo('correct','correct!')

        else:

            tkm.showerror('try again','wrong,try again')
            
    entry = tk.Entry(e,textvariable = er)

    entry.place(x=90,y=60)

    tk.Button(e,text = 'submit',command = check).place(x=80,y = 80)

tk.Button(window,text='1',command = math1).pack()

window.mainloop()

解决方法

首先需要import tkinter as tk,否则tk是未定义的。

接下来,您的线路在这里:

tk.Button(e,text = 'submit',command = check).place(x=80,y = 80)

应替换为:

tk.Button(e,command = lambda: check(int(entry.get()))).place(x=80,y = 80)

让我解释一下这是如何工作的。

  1. 您不能只将 check 传递给按钮,因为 check 需要一个 entry 参数。您可以通过定义一个调用 lambdacheck(entry) 函数来解决这个问题。

  2. 要从 entry 小部件获取输入,您需要执行 entry.get();但是,由于 entry 将输入存储为字符串,因此您必须使用 int() 将其转换为整数才能将其与 22 进行比较。

完整代码如下:

import tkinter.messagebox as tkm
import tkinter as tk

window = tk.Tk()

window.title('my tk')

window.geometry('550x450')

def math1():

    e = tk.Tk()

    e.geometry('200x150')

    tk.Label(e,text = '10',height = 2).pack()

    tk.Label(e,text = '+ 12',height = 2).place(x=80,y=25)

    er = tk.StringVar()

    def check(entry):

        if entry == 22:

            tkm.showinfo('correct','correct!')

        else:

            tkm.showerror('try again','wrong,try again')
            
    entry = tk.Entry(e,textvariable = er)

    entry.place(x=90,y=60)

    tk.Button(e,y = 80)

tk.Button(window,text='1',command = math1).pack()

window.mainloop()

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...