AttributeError:“函数”对象没有属性“ addNewMessage”

时间:2018-12-09 15:15:19

标签: python class user-interface methods tkinter

我正面临这个问题。我在py中使用线程和GUI都很新,这就是为什么我不能摆脱它。 基本上我有这个课:

class receiving(threading.Thread): #thread class
    #init and other methods
    def run(self):
    data = self.sock.recv(1024) #sock is the socket on which the 'run' method as to listen on
    UserIF.main.addNewMessage(data) #with this line i want to pass the 'data' variable to the 'addNewMessage' method

在套接字上侦听并返回一个字符串,我必须将此字符串写入此类中的tkinter'Text'对象:

class UserIF():
    def main(self):
        #some code
        messages = tk.Text(master=window, height=10, width=30)
        messages.grid(column=5, row=4)
        def addNewMessage(string):
            messages.insert(string)

我正在尝试某种我知道在python中不存在的“转到”。

1 个答案:

答案 0 :(得分:1)

为什么还要使用嵌套函数?只需在与addNewMessage函数相同的标识上创建main函数,别忘了在self之前添加string默认参数。然后UserIF.addNewMessage(data)函数中的run应该可以工作。

class receiving(threading.Thread): #thread class
    #init and other methods
    def run(self):
        data = self.sock.recv(1024)
        UserIF.addNewMessage(data)

class UserIF():
    def main(self):
        #some code
        self.messages = tk.Text(master=window, height=10, width=30)
        self.messages.grid(column=5, row=4)

    def addNewMessage(self, string):
        self.messages.insert(string)

或者,如果不需要使用self,则可以创建一个静态方法。

@staticmethod
def addNewMessage(string):
    #The next two lines I'm not sure if they are needed.
    messages = tk.Text(master=window, height=10, width=30)
    messages.grid(column=5, row=4)
    #This should work now
    messages.insert(string)