Я использую функцию "on_message", которая вызывается в функции receiveText () для получения входящего сообщения от MQTT-сервера.
Полученное сообщение отражается в операторе печати, но не можетполучить вставку в список.
При использовании тех же строк кода он вставляется в функцию sendText ().
Код:
class chat_UI:
def __init__(self, roots, nameLogin, friendLogin):
roots.title("Chat window")
self.nameLogin = nameLogin
self.friendLogin = friendLogin
self.scrollbar = Scrollbar(roots) # To see through previous messages.
self.msg_list = Listbox(roots, height=30, width=100, yscrollcommand=self.scrollbar.set)
self.msg_list.grid(row=0, column=0, columnspan=1)
self.scrollbar.grid(sticky = W)
self.msg_list.grid(sticky = E)
#self.msg_list.see(END)
Label(roots, text="Enter Message").grid(row=1,column=0)
self.entry_field = Entry(roots,width=20)
self.entry_field.grid(row=1, column=1)
self.sendB = Button(roots, text='Send', command=self.sendText)
self.sendB.grid(row=2, column = 1, pady=4, sticky=W)
t1 = threading.Thread(target=self.recieveText,args=(friendLogin, nameLogin))
t1.start()
#t1.join()
def sendText(self):
nameLogin = self.nameLogin
friendLogin = self.friendLogin
self.message = self.entry_field.get()
#self.msg_list.insert(END, (self.friendLogin + ": " + recMsg))
self.msg_list.insert(END, (self.nameLogin + ": " + self.message))
mqtt_connect(nameLogin).publish(("techieChat/" + nameLogin), str(self.message), qos = 0)
def on_message(client, userdata, msg):
print("In on messafe fn")
global recMsg
recMsg = str(msg.payload)
print("message in chat_ui on_mesg fn: " + recMsg)
self.msg_list.insert(END, recMsg)
def recieveText(self, friendLogin, nameLogin):
print("message in receive text message: " + recMsg)
client = mqtt_connect(friendLogin)
client.subscribe("techieChat/" + friendLogin)
client.on_message = chat_UI.on_message
Класс chat_UI создается из другого класса
self.newWindow = Toplevel(self.roots)
chat_UI(self.newWindow, nameLogin, friendLogin)