缺少两个位置参数

2024-04-29 16:25:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在学习编程接口,我面临以下问题:

soma() missing 2 required positional arguments: 'a' and 'b'.

如果有人能帮我解决这个问题,我将不胜感激。我在下面提供了我的代码:

from tkinter import*

class calculadora:
    def __init__(self,master):
        frame=Frame(master)
        frame.pack()
        self.somar = Button(root,text = 'SOMAR',command = self.soma)
        self.somar.pack(side=TOP)
        entry1 = Entry(frame)
        entry1.pack(side=BOTTOM)
        entry2 = Entry(frame)
        entry2.pack(side=BOTTOM)
        labelR=Label(frame,text='[Aqui]').pack(side=TOP)

    def soma(self,a,b):
        self.a = int(entry1.get())
        self.b = int(entry2.get())
        labelR['text'] = self.a+self.b



root = Tk()
root.title("Calculadora")
root.geometry("300x300+200+200")
x =calculadora(root)

root.mainloop()

谢谢你。你知道吗


Tags: textselfmastertopdefrootframeside
2条回答
self.somar = Button(root,text = 'SOMAR',command = self.soma)

该行定义每次单击按钮时,它都将调用self.soma,这意味着它将调用以对象作为第一个参数的soma方法。你知道吗

但是,soma方法需要三个参数:selfab。这些暂时不见了。你知道吗

编辑:

如果要解决这些问题,可以在命令中包含它们

self.somar = Button(root,text = 'SOMAR',command = lambda: self.soma(True, False)

在这里,您将使用a=True和b=False调用soma方法

或者你也可以去掉soma中的a和b参数,它们目前实际上是无用的。你知道吗

Calculadora类中有一些问题(类名通常大写)

  1. soma函数中使用entry1entry2,但它们不是在__init__方法之外定义的,因此需要将它们更改为self.entry1/2,以便能够从soma函数访问它们。

  2. labelR也是如此,但也因为Label(frame,text='[Aqui]').pack(side=TOP)返回NonelabelRNone。您需要将标签创建与包装分开。

  3. 对于soma函数,ab是应该删除的无用参数,我删除了中ab前面的self

    self.a = int(entry1.get())
    self.b = int(entry2.get())
    

    因为这里不需要。

代码如下:

class Calculadora:
    def __init__(self, master):
        frame = Frame(master)
        frame.pack()
        self.somar = Button(root,text = 'SOMAR',command = self.soma)
        self.somar.pack(side=TOP)
        self.entry1 = Entry(frame) # 1
        self.entry1.pack(side=BOTTOM) 
        self.entry2 = Entry(frame) # 1
        self.entry2.pack(side=BOTTOM)
        self.labelR = Label(frame,text='[Aqui]') # 2
        self.labelR.pack(side=TOP) # 2

    def soma(self): # 3
        a = int(self.entry1.get())
        b = int(self.entry2.get())
        self.labelR['text'] = a + b

相关问题 更多 >