python - 关于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'” 谁能告诉我为什么我得到这个代码?
解决方案
之所以会出现这个问题,是因为正如我在评论中所说,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() 方法而不是你的特定实例
推荐阅读
- ruby-on-rails - Ruby on Rails 测试 - ActiveRecord::StatementInvalid: PG::InvalidTextRepresentation: ERROR: malformed array literal:
- python - 如何将 Python 中的加权边缘列表转换为一般边缘列表?
- prestashop-1.6 - 产品名称中的正则表达式问题(TPL prestashop 1.6)
- javascript - 如何在javascript中减去两个时间字符串(HH:MM)?
- xpath - 如何使用机器人框架获取 div 的最后一个定位器
- c# - 是否可以使用 ef core 和迁移来做全索引表?
- servlets - 为 Servlet 编写单元测试用例
- r - 无法在 R Studio 中安装包
- javascript - insertAdjacentHtml 和 insertAdjacentElement 有什么区别?
- python - 仅对数组的 n 个最佳值计算最小二乘