AttributeError: у объекта 'function' нет атрибута 'addNewMessage' - PullRequest
0 голосов
/ 09 декабря 2018

Я столкнулся с этой проблемой.Я довольно новый как с потоками, так и с графическим интерфейсом в py, и именно поэтому я не могу выйти из этого.В основном у меня есть этот класс:

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)

Я пытаюсь что-то вроде 'go to', которого, как я знаю, не существует в python.

1 Ответ

0 голосов
/ 09 декабря 2018

Зачем вообще использовать вложенные функции?просто создайте функцию 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...