首页 > 解决方案 > 关于python制作计算器报错的问题

问题描述

from tkinter import *

window = Tk()
window.title("Calculator")
window.geometry('350x500')
num1 = Label(window, text='Input :').grid(column=0, row=0)
num2 = Label(window, text='Input :').grid(column=0, row=1)
res_label = Label(window, text='output :').grid(column=0, row=2)
entry1 = Entry(window)
entry1.grid(column=1, row=0)
entry2 = Entry(window)
entry2.grid(column=1, row=1)
def add():
    res_text = 'result =' + str(float(Entry.get()) + float(Entry.get()))

def minus(event):
    res_text = 'result =' + str(float(num1.get()) - float(num2.get()))

def slice():
    res_text = 'result =' + str(float(num1.get()) / float(num2.get()))

def multi():
    res_text = 'result =' + str(float(num1.get()) * float(num2.get()))

def result():
    res_label.configure(text=res_text)

def press(value):
    value1 = str(value)
    Entry.insert(INSERT, value1)

btn1 = Button(window, width=15, text='1', command=lambda: press(1)).grid(column=0, row=3)
btn2 = Button(window, width=15, text='2').grid(column=1, row=3)
btn3 = Button(window, width=15, text='3').grid(column=2, row=3)
btn4 = Button(window, width=15, text='4').grid(column=0, row=4)
btn5 = Button(window, width=15, text='5').grid(column=1, row=4)
btn6 = Button(window, width=15, text='6').grid(column=2, row=4)
btn7 = Button(window, width=15, text='7').grid(column=0, row=5)
btn8 = Button(window, width=15, text='8').grid(column=1, row=5)
btn9 = Button(window, width=15, text='9').grid(column=2, row=5)
btn0 = Button(window, width=15, text="0").grid(column=0, row=6)

btn_plus = Button(window, width=15, text="+", command=add)
btn_plus.grid(column=4, row=3)
btn_minus = Button(window, width=15, text="-", command=minus).grid(column=4, row=4)
btn_multi = Button(window, width=15, text="*", command=multi).grid(column=4, row=5)
btn_slice = Button(window, width=15, text="/", command=slice).grid(column=4, row=6)
btn_res = Button(window, width=15, text='=').grid(column=2, row=6)

这是我的代码,但是当我按下运行并按下弹出窗口上的 1 个按钮时,我收到一条错误消息:“TypeError: insert() missing 1 required positional argument 'string'” 谁能告诉我为什么我得到这个代码?

标签: python

解决方案


之所以会出现这个问题,是因为正如我在评论中所说,insert() 是来自类 Entry() 的方法。因此,作为一个实例方法,它需要使用 self 参数调用,self 表示特定的实例。使用 self 参数调用此方法的方法是直接使用您要从中调用它的特定 Entry 类实例来调用它。

在您的代码中有两个问题。首先,您在类对象“Entry”上调用该方法,而不是在类实例 Entry() 上调用该方法,这就是您看到如前所述错误的原因。其次,您不使用之前创建的特定 Entry 实例。所以它不会在你想要的地方插入文本。

你可以试试这个 insert() 方法:

def press(value):
    value1 = str(value)
    if  '.!entry' == window.focus_get().__str__():
         entry1.insert(INSERT, value1)
    elif '.!entry2' == window.focus_get().__str__():
        entry2.insert(INSERT, value1)

解释:

您可以根据要输入文本的哪个 Entry() 实例进行选择。如果在您的窗口中选择了 entry1,则插入该条目,如果这是 entry2,则插入该条目。

方法 window.focus_get() 告诉您当前在窗口中聚焦哪个实例元素。邓德法。str () 将元素名称作为字符串返回,在这种情况下,如果您选择了 entry1,则为“.!entry”,如果您选择了 entry2,则为“.!entry2”


笔记:

顺便说一句,在你的 add() 函数中,你在你的类对象上调用 get() 方法而不是你的特定实例


推荐阅读