Невозможно вставить данные в список tkinter - PullRequest
0 голосов
/ 06 февраля 2019

Я использую функцию "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)

1 Ответ

0 голосов
/ 06 февраля 2019

Вы пытались использовать ярлык tk?Они могут предлагать переменную информацию, например, так:

        label = tk.Label(textvariable=recMsg)
        label.pack(side="left") #<--- i presume you may want to use grid here
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...