如何与 Kivy GUI 一起运行 Tornado 事件循环?

2024-03-25

我的客户端应用程序使用KivyGUI(Kivy 有自己的事件循环)并使用 WebSocket 协议连接到服务器Tornado(Tornado 也有一个事件循环)。这就是连接部分是异步的原因。
我希望用户在 Tornado 客户端运行监听服务器消息的无限异步循环时与 UI 进行交互。

这是一些示例代码:
客户端测试.py

from tornado.ioloop import IOLoop
from tornado.websocket import websocket_connect

class RequestSender:
    url = 'server url here (no scheme)'

    async def _connect(self):
        self.conn = await websocket_connect('wss://' + self.url, io_loop=self.ioloop)
        self.ioloop.add_callback(self._listen)

    async def _listen(self):
        while True:
            print(await self.conn.read_message())

    def __init__(self):
        self.ioloop = IOLoop.current()
        self.ioloop.add_callback(self._connect)

    def run(self):
        self.ioloop.start()

GUI

from kivy.app import App
from kivy.uix.label import Label
from client_test import RequestSender

class TestApp(App):
    def build(self):
        RequestSender().run()
        return Label(text = "hello")

TestApp().run()

显然,由于 Tornado 的事件循环较早开始,它已经接管了程序流程,现在没有 GUI 窗口出现。
我执行 GUI 文件,执行后挂起RequestSender().run(), so build永远不会回来。

对该案例的搜索几乎没有提供任何信息,除了此 Google 网上论坛帖子 https://groups.google.com/forum/#!topic/kivy-users/8YV6dou14uY。 Kivy的文档仅提到Twisted https://kivy.org/docs/guide/other-frameworks.html.

我尝试将 Kivy 事件循环置于从属模式并从 Tornado 的事件循环运行 GUI 更新,但这不起作用,因为显然是一个调用EventLoop.idle()Kivy 的事件循环不足以保持 GUI 应用程序运行。

这里还能做什么?


我发现这个问题试图做同样的事情,并选择了两个单独的过程;一个 Kivy GUI 和一个 Tornado(在我的例子中是服务器)。我让两者进行通信multiprocessing.connection正如在这个答案 https://stackoverflow.com/a/6921402/1705163

如果您有大量复杂的数据要在两者之间传递,也许这不太理想,但对于简单的消息来说它效果很好。您还具有无需 UI 即可运行以及在单独的计算机上运行 UI 的优势。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何与 Kivy GUI 一起运行 Tornado 事件循环? 的相关文章

随机推荐

  • java - 无法从 DocumentListener 方法内部更改 JTextfield 的值

    我收到 尝试在通知中进行变异 异常 1 我怎样才能改变它 2 如何获取触发监听器之前 TextField 内的值 EDIT 是这样的 在 JTextfield 上我有这个监听器 basePriceTF getDocument addDocu
  • 使用 Windows 身份验证和特定帐户连接到 SQL Server

    我有一个 ASP Net 应用程序 它使用 Windows 身份验证运行 与 SQL Server 的连接通常是通过创建 SQL Server 帐户并在连接字符串中使用该帐户来完成的 然而 在这个特定的非常严格的托管环境中 我们被要求使用特
  • “警告:react-modal:应用程序元素未定义。请使用`Modal.setAppElement(el)`或设置`appElement={el}`”

    如何使用react modal包在React应用程序的控制台中修复此警 告 警告 react modal 应用程序元素未定义 请用Modal setAppElement el or set appElement el 我还没有成功地弄清楚什
  • SwiftUI @FocusState - 如何赋予它初始值

    我很高兴看到 TextField 增强功能 focused https developer apple com documentation swiftui view focused https developer apple com doc
  • 用于构建面向对象软件的好资源或书籍[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • mariadb声明变量语法错误

    我使用 mariadb 和 heidisql 来执行 sql 声明 AccountID INT 插入帐户 名字 mi 姓氏 电子邮件 is admin is enabled date created 值 testfirstname a te
  • htaccess 强制 https 并将 www 重定向到非 www,但没有其他子域

    我知道有很多类似的线程 但似乎没有一个与我的确切问题相符 这是我正在尝试做的事情 1 http www mydomain com gt https mydomain com 2 http mydomain com gt https mydo
  • PHP 友好 URL 路由帮助

    我正在构建一个通过index php 运行所有代码的网站 例如index php controller something id 01234 我想使用 PHP 创建友好的 URL 所以我这样做 request str replace roo
  • SQL Server 通配符[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions Does Select from t
  • Python:检测黑色方块

    我正在尝试检测黑色方块 到目前为止 这是我的代码 frame cv2 imread squares jpg img cv2 GaussianBlur frame 5 5 0 img cv2 cvtColor frame cv2 COLOR
  • msgrcv - SA_RESTART 标志不起作用

    我的使用 IPC 队列在线程之间通信的代码有问题 我需要安全地处理 SIGINT 让程序在关闭之前出现 SIGINT 时完成所有活动线程 不过 我在寻找解决方案方面遇到了严重的问题 因为即使使用带有标志 SA RESTART 的 SIGIN
  • 更改 RMarkdown pdf 输出中图形标题的字体大小

    我想缩小 R Markdown 文档中所有标题 图形和表格 的字体大小 我用的是bookdown 最终输出是 pdf 我正在 R Studio 中工作 为了加载图片 我使用include graphics函数来自knitr 因为有人告诉我这
  • 无法加载时间字符串的 IOSurface。本地渲染而不是 swift 4

    当我运行我的项目时 你能帮我解决这个问题吗 无法加载时间字符串的 IOSurface 改为本地渲染 我不知道我的编码发生了什么 请帮忙 I fixed the problem Select target gt General gt sele
  • 正则表达式匹配数字和字符

    如何创建仅匹配字符和数字的正则表达式 这个正则表达式匹配宽度数字 D g 如何添加类似字符 等等 仅匹配字母和数字 A Za z0 9 将所需的字符添加到上述字符类中 以匹配该特定字符 A Za z0 9 您可以将上述正则表达式减少为 w
  • 渲染表格中的下标/上标(闪亮)

    我在一个闪亮的应用程序中有一个数据表 我想在其中添加上标到我的观察结果中 这些应该详细说明观察结果是否是估计值 以及观察年份距参考年份有多远 此数据已经在我的数据集中 例如 特定的观察结果可能显示 75 上标 3 e 这可能吗 我今天也有同
  • $sce:itype 尝试信任需要字符串的内容中的非字符串值:上下文:resourceUrl

    我想播放存储在我的 sails 服务器中的歌曲 路径是http localhost 4000 images 123 mp3 在前端 我使用 ng repeat 列出来自服务器的歌曲 div div i class fa fa play ci
  • helm 图表中的动态命名空间变量

    我与四个团队合作 他们使用在 kubernetes 命名空间中设置的完全相同的环境 我创建了 helm 图表来安装这些环境 一切正常 但由于主机名格式如下 我必须手动创建入口
  • ClickOnce 快捷方式无法启动应用程序

    我在 VS 2017 中创建了一个使用 ClickOnce 安装的 WPF 应用程序 将解决方案部署到网络位置后 我可以通过访问 application 链接在我的 64 位 Windows 10 计算机上安装 但是 该应用程序安装后无法在
  • 完成时更新整个

    编辑单元格后 我很难重新渲染 PrimeFaces 数据表 更改一个单元格中的值可能会更改其他单元格中的条目 因此需要刷新整个表格 这是 JSF 页面
  • 如何与 Kivy GUI 一起运行 Tornado 事件循环?

    我的客户端应用程序使用KivyGUI Kivy 有自己的事件循环 并使用 WebSocket 协议连接到服务器Tornado Tornado 也有一个事件循环 这就是连接部分是异步的原因 我希望用户在 Tornado 客户端运行监听服务器消