我在制作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'
我不明白这个错误意味着什么。有人能告诉我这是什么意思吗?
答案 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
函数应与send
和create_widgets
函数具有相同的缩进。在__init__
函数中,您必须将send
替换为self.start.sleep(2)
,time.sleep(2)
对象没有任何睡眠功能。
这是完整的代码:
time
希望这有帮助!