【问题标题】:Update client's GUI widget from Server with RFC widget使用 RFC 小部件从服务器更新客户端的 GUI 小部件
【发布时间】:2015-05-25 07:20:01
【问题描述】:

我用python制作了简单的GUI聊天程序

从服务器调用回调函数:

def broadcast(self, msg):
    with lock:
        print("bloadcast calls")
        global callbacks
        global buf
        for user, callback in callbacks.items():
            if user not in buf or buf[user] == None:
                buf[user] = (msg,)
            else:
                buf[user] = buf[user] + (msg,)
            callback()

回调函数发出客户端信号

service.root.accept(idt, chat.update.update.emit)

在服务器的接受函数中

callbacks[idt] = rpyc.async(callback)

就是这样

class Updater(QObject):
    update = pyqtSignal()

在我的客户端类中

self.update = Updater()
self.update.update.connect(self.listen)

监听方法是

def listen(self):
    msg = self.service.root.get_buf(self.idt)//get server's message by call server's function
    for m in msg:
        self.log.append(m)

所以服务器调用回调函数并在客户端发出更新 GUI 小部件的信号

当有一个客户端时,它运行良好。但是当有多个客户端时,例如客户端 A 和客户端 B,A -message-> 服务器和服务器只更新 A 的 GUI 小部件。 B 的回调被阻塞,直到 B 向服务器发送消息。我希望该客户端的 GUI 更新调用立即像中断调用一样

我该怎么做?

【问题讨论】:

    标签: python python-3.x pyqt rpyc


    【解决方案1】:

    只需添加一行

    rpyc.BgServingThread(service)#service is rpyc connection
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多