TypeError:send()缺少2个必需的位置参数:'interp'和'cmd'

时间:2016-03-16 14:18:29

标签: python

我在制作GUI程序时得到了TypeError

以下是代码:

import time, random
from tkinter import *

class Application(Frame):
   def __init__(self, master):
      Frame.__init__(self, master)
      self.grid()
      self.create_widgets()

   def create_widgets(self):
      self.lbl1=Label(self, text="Write your message:")
      self.lbl1.grid(row=0, column=0, columnspan=2, sticky=W)

      self.entry=Entry(self)
      self.entry.grid(row=0, column=2, columnspan=3, sticky=W)

      self.bttn=Button(self, text="Send", command=self.send)
      self.bttn.grid(row=1, column=0, sticky=W)


      def send(self):
          self.start=time.time()

          self.lbl2=Label(self, text="Sending...")
          self.lbl2.grid(row=1, column=1, sticky=W)

          self.start.sleep(2)
          self.lbl2.destroy()


root=Tk()
root.title("Mail")
app=Application(root)
root.mainloop()

我收到了这个错误:

TypeError: send() missing 2 required positional arguments: 'interp' and 'cmd'

我不明白这个错误意味着什么。有人能告诉我这是什么意思吗?

2 个答案:

答案 0 :(得分:3)

您的create_widgets函数是缩进的,因此它是在Application内定义的。因此,Python不会将其识别为command=self.send类的方法,因此send指的是属于父Frame类的现有send方法。< / p>

取消缩进 def create_widgets(self): self.lbl1=Label(self, text="Write your message:") #etc def send(self): self.start=time.time() #etc 方法,使其与所有其他类方法具有相同的缩进级别。

def send():

或者,保持缩进不变,但将参数列表更改为def send,移动self.bttn=Button(self, text="Send", command=self.send)使其显示在self行上方,然后移除 def create_widgets(self): def send(): self.start=time.time() self.lbl2=Label(self, text="Sending...") self.lbl2.grid(row=1, column=1, sticky=W) self.start.sleep(2) self.lbl2.destroy() self.lbl1=Label(self, text="Write your message:") self.lbl1.grid(row=0, column=0, columnspan=2, sticky=W) self.entry=Entry(self) self.entry.grid(row=0, column=2, columnspan=3, sticky=W) self.bttn=Button(self, text="Send", command=send) self.bttn.grid(row=1, column=0, sticky=W) 那些不再需要的东西。

class AppViewModel : Conductor<object>
{
    private bool _MenuIsVisible;

    public bool MenuIsVisible
    {
        get { return _MenuIsVisible; }
        set
        {
            if (_MenuIsVisible != value)
            {
                _MenuIsVisible = value;
                NotifyOfPropertyChange(() => MenuIsVisible);
            }
        }
    }

    public AppViewModel()
    {
        MenuIsVisible = true;
        _ShowTutorial();
    }

    private void _ShowTutorial()
    {
        ActivateItem(new FirstViewModel());
    }

}



public class FirstViewModel : Screen
{
    protected override void OnActivate()
    {
        base.OnActivate();
    }
}

答案 1 :(得分:0)

您的forEach函数应与sendcreate_widgets函数具有相同的缩进。在__init__函数中,您必须将send替换为self.start.sleep(2)time.sleep(2)对象没有任何睡眠功能。

这是完整的代码:

time

希望这有帮助!