0

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

Tkinter 回调 Traceback 中的异常(最近一次调用最后一次):文件“C:\Users\yu.000\AppData\Local\Programs\Python\Python38-32\lib\tkinter_init _.py ”,第 1883 行,调用 返回self.func(*args) TypeError: 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()
4

1 回答 1

4

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

接下来,您的行在这里:

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

应替换为:

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

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

  1. 您不能只传递check给按钮,因为check需要一个entry参数。您可以通过定义一个lambda调用check(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, text = 'submit', command = lambda: check(int(entry.get()))).place(x=80, y = 80)

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

window.mainloop()
于 2021-02-17T16:39:40.090 回答