Tkinter RabbitMQ и Темы - PullRequest
       4

Tkinter RabbitMQ и Темы

0 голосов
/ 17 апреля 2020

Я пытался создать синхронный текстовый редактор, используя Tkinter, rabbitmq и потоки, и он почти закончен, но у меня проблема с rabbitmq, я не получаю последнее отправленное сообщение, я всегда получаю предыдущее последнее сообщение, вот так : получатель должен иметь эту строку "Это отправитель 1"

, пока последнее сообщение не отображается в моей программе, оно существует, потому что я проверил панель мониторинга rabbitmq.

Есть ли решение этой проблемы? код получателя

import pika
from tkinter import *
import threading
class App(threading.Thread):

    def __init__(self, tk_root,t,text,q1):
        self.root = tk_root
        threading.Thread.__init__(self)
        self.start()
        self.t=t
        self.text=text
        self.q1=q1
    def on_message(self,channel, method_frame, header_frame, body):
        self.t.config(state=NORMAL)
        self.text=body
        self.text=self.text[:-1]
        self.t.delete('1.0', END)
        self.t.insert(INSERT,self.text)
        channel.basic_ack(delivery_tag=method_frame.delivery_tag)
        self.t.config(state=DISABLED)
    def run(self):
        connection = pika.BlockingConnection()
        channel = connection.channel()
        channel.basic_consume(self.q1, self.on_message)
        try:
            channel.start_consuming()
        except KeyboardInterrupt:
            channel.stop_consuming()
        connection.close()
class receiver(threading.Thread) :
    def run(self) :
        self.ROOT = Tk()
        self.text=""
        self.ROOT.title('receiver')
        self.frame = Frame(self.ROOT,width=50,height=30)
        self.t=Text(self.ROOT,borderwidth=5,height=30,width=50)
        self.t.config(state=DISABLED)
        self.t.grid(row=0,column=0)
        self.frame.grid()
        APP = App(self.ROOT,self.t,self.text,self.q1)
        self.ROOT.mainloop()
    def __init__(self,q1) :
        threading.Thread.__init__(self)
        self.start()
        self.q1=q1

код отправителя:

import pika
from tkinter import *
import threading
class App(threading.Thread):

    def __init__(self, tk_root,t,text,q1):
        self.root = tk_root
        threading.Thread.__init__(self)
        self.start()
        self.t=t
        self.text=text
        self.q1=q1
    def on_message(self,channel, method_frame, header_frame, body):
        self.text=body
        self.text=self.text[:-1]
        self.t.delete('1.0', END)
        self.t.insert(INSERT,self.text)
        channel.basic_ack(delivery_tag=method_frame.delivery_tag)
    def run(self):
        connection = pika.BlockingConnection()
        channel = connection.channel()
        channel.basic_consume(self.q1, self.on_message)
        try:
            channel.start_consuming()
        except KeyboardInterrupt:
            channel.stop_consuming()
        connection.close()
class sender(threading.Thread) :
    def send (self,msg):
        connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))
        channel = connection.channel()
        channel.queue_declare(queue=self.q)
        channel.basic_publish(exchange='',routing_key=self.q,body=msg)
        channel.queue_declare(queue=self.q2)
        channel.basic_publish(exchange='',routing_key=self.q2,body=msg)
        connection.close()
    def key (self,e):
        if e.char.isalpha() or e.char==' '  :
            self.text=self.t.get('1.0','end')
            self.send(self.text)
    def bs (self,e):
        text=self.text
        text=text[:-1]
        self.t.delete('1.0', END)
        self.t.insert(INSERT,text)
        self.text=text
        self.send(self.text)   
    def run(self) :
        self.ROOT = Tk()
        self.text=""
        self.ROOT.title('sender')
        self.frame = Frame(self.ROOT,width=50,height=30)
        self.t=Text(self.ROOT,borderwidth=5,height=30,width=50)
        self.t.bind('<Key>',self.key)
        self.t.bind('<BackSpace>',self.bs)
        self.t.grid(row=0,column=0)
        self.frame.grid()
        APP = App(self.ROOT,self.t,self.text,self.q1)
        self.ROOT.mainloop()
    def __init__(self,q,q1,q2) :
        threading.Thread.__init__(self)
        self.start()
        self.q=q
        self.q1=q1
        self.q2=q2

основной код приложения:

from sender import sender
from receiver import receiver
sender('text','text1','text2')
sender('text1','text','text2')
receiver('text2')

изменить это другое изображение: here's no problem with digits as you can see here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...