Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python leave()只接受1个参数(给定0)_Python_Class_Methods_Python 3.x_Self - Fatal编程技术网

Python leave()只接受1个参数(给定0)

Python leave()只接受1个参数(给定0),python,class,methods,python-3.x,self,Python,Class,Methods,Python 3.x,Self,好的,我的问题是,当从外部(顶层)调用类内部的方法时,它接受self参数,就好像它是一个参数,它希望为我的类指定一个值: class Client: def __init__(self, host='localhost', port=5000): try: self.server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.server_so

好的,我的问题是,当从外部(顶层)调用类内部的方法时,它接受self参数,就好像它是一个参数,它希望为我的类指定一个值:

class Client:
    def __init__(self, host='localhost', port=5000):
        try:
            self.server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            self.server_socket.connect((host, port))
            info.set("Connected...")
            self.boool = True
            self.gotten = ""
            self.data = ""
            b1.config(state=NORMAL)
            b2.config(state=NORMAL)
            textEntry.config(state=NORMAL)
            time.sleep(1)
            threading.Timer(1.0, self.listen).start()
        except socket.error as error:
            self.boool = False
            info.set(str(error)[14:])
        except:
            self.boool = False
            info.set("An unknown error occured")


    def leave(self):
        self.boool = False
        self.server_socket.close()
        b1.config(state=DISABLED)
        b2.config(state=DISABLED)
        textEntry.config(state=DISABLED)

    def listen(self):       
        while self.boool == True:
            time.sleep(0.1)
            self.data = self.server_socket.recv(512)
            if self.data == bytes('quit', 'UTF-8'):
                self.leave()
                print("Server has left the chat")
            elif self.data != self.gotten:
                v.set("Server: %s\n%s" % (self.data, v.get()))
                self.gotten = self.data


    def send(self, message=''):
        self.data.send(bytes(message, 'UTF-8'))
        v.set("Client: %s\n%s" % (message, v.get()))
我的tkinter按钮调用客户机类,还有一个调用leave()方法:

错误是:

Traceback (most recent call last):
File "C:\Python32\chatClient2.py", line 68, in <module>
b2 = Button(root, text="Leave", width=8, state=DISABLED, command=Client.leave)
TypeError: leave() takes exactly 1 argument (0 given)
回溯(最近一次呼叫最后一次):
文件“C:\Python32\chatClient2.py”,第68行,在
b2=按钮(root,text=“Leave”,宽度=8,状态=DISABLED,命令=Client.Leave)
TypeError:leave()正好接受1个参数(给定0)

客户端实例应该在用户按下“连接”按钮时创建,因此让它调用方法
GUI.Connect
,该方法创建
self.client=client()

然后使用第二个方法
GUI.leave
,调用该方法时,将委托给
self.client.leave()


客户端实例应该在用户按下“连接”按钮时创建,因此让它调用一个方法
GUI.Connect
,该方法创建
self.client=client()

然后使用第二个方法
GUI.leave
,调用该方法时,将委托给
self.client.leave()


有两个缩进。在“class Client:”之后,正如您所知。您能否显示在替换
Client.leave
Client().leave
时出现的错误?我相信这会给你一个绑定的方法,因此会起作用……你是绝对正确的,现在确实起作用了。我的问题是:''b2=Button(root,text=“Leave”,width=8,state=DISABLED,command=Client().Leave)'',在启动时调用客户机类,这并不意味着仅在单击“连接”按钮时调用该类。有和缩进。在“class Client:”之后,正如您所知。您能否显示在替换
Client.leave
Client().leave
时出现的错误?我相信这会给你一个绑定的方法,因此会起作用……你是绝对正确的,现在确实起作用了。我的问题是:''b2=Button(root,text=“Leave”,width=8,state=DISABLED,command=Client().Leave)'',在启动时调用客户端类,但这并不是要在单击“连接”按钮时才调用该类。这是非常正确的,尽管我尝试使用Client()。离开也会产生相同的错误:(Oops..您正在使用Python3。Python3中已删除了未绑定方法的概念。编辑答案…当启动GUI()时,它反过来调用setup_buttons(),出于某种原因,类Client()仅通过命令=Client()调用。leave,当将其更改为命令=Client.leave时:它不是调用
客户端。
但是
Client.leave
没有。请尝试使用
command=self.leave
command=self.connect
。再次感谢,但现在b2不是一个全局变量,这意味着在客户端调用它时,它无法识别。我知道您可以通过设置全局b2或类似的设置轻松解决此问题,但这不是我喜欢做的事情。这是非常正确的,尽管我尝试使用Client()。离开也会产生相同的错误:(Oops..您正在使用Python3。Python3中已删除了未绑定方法的概念。编辑答案…当启动GUI()时,它反过来调用setup_buttons(),出于某种原因,类Client()仅通过命令=Client()调用。leave,当将其更改为命令=Client.leave时:它不是调用
客户端。
但是
Client.leave
没有。请尝试使用
command=self.leave
command=self.connect
。再次感谢,但现在b2不是一个全局变量,这意味着在客户端调用它时我知道你可以通过设置全局b2或类似的设置来轻松解决这个问题,但我不喜欢这样做。
Traceback (most recent call last):
File "C:\Python32\chatClient2.py", line 68, in <module>
b2 = Button(root, text="Leave", width=8, state=DISABLED, command=Client.leave)
TypeError: leave() takes exactly 1 argument (0 given)
class GUI():
    def __init__(self):
        self.client = None
    def setup_buttons(self):
        self.b1 = ...
        self.b2 = Button(root, text = "Leave", width = 8, state = DISABLED, command = self.leave)
        b2.grid(row = 0, column = 3)
        Button(root, text = "Connect", width = 8, command = self.connect).grid(row = 0, column = 4)
    def connect(self):
        self.b1.config(state = NORMAL)
        self.b2.config(state = NORMAL)
        self.client = Client()
    def leave(self):
        if self.client:
            self.b1.config(state = DISABLED)
            self.b2.config(state = DISABLED)
            self.client.leave()