- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用高速公路连接到服务器并获取 “推送”
通知,我想使用他们扭曲的事件循环制作一个简单的 urwid 界面。但是我不确定从我的高速公路处理程序类设置 urwid 文本的最佳方法是什么。在下面的代码中,您可以看到我当前的实现,我想从我的 "MyFrontendComponent"
类中调用 "updateText"
方法。这样做的最佳方法是什么?
import urwid
from twisted.internet import reactor
from twisted.internet.defer import inlineCallbacks
from twisted.internet.endpoints import clientFromString
from autobahn.twisted import wamp, websocket
from autobahn.wamp import types
from autobahn.wamp.serializer import *
class MyFrontendComponent( wamp.ApplicationSession, object):
@inlineCallbacks
def onJoin(self, details):
## call a remote procedure
try:
now = yield self.call(u'com.timeservice.now')
except Exception as e:
print("Error: {}".format(e))
else:
print("Current time from time service: {}".format(now))
## subscribe to a topic
self.received = 0
def on_event(i):
print("Got event: {}".format(i))
self.received += 1
if self.received > 5:
self.leave()
sub = yield self.subscribe(on_event, u'com.myapp.topic1')
print("Subscribed with subscription ID {}".format(sub.id))
def onDisconnect(self):
reactor.stop()
class MyApp(object):
txt = urwid.Text(u"Hello World")
def __init__(self):
component_config = types.ComponentConfig(realm="realm1")
session_factory = wamp.ApplicationSessionFactory(config=component_config)
session_factory.session = MyFrontendComponent
serializers = None
serializers = []
serializers.append(JsonSerializer())
transport_factory = websocket.WampWebSocketClientFactory(session_factory,
serializers=serializers, debug=False, debug_wamp=False)
client = clientFromString(reactor, "tcp:127.0.0.1:8080")
client.connect(transport_factory)
fill = urwid.Filler(self.txt, 'top')
loop = urwid.MainLoop(fill, unhandled_input=self.show_or_exit, event_loop=urwid.TwistedEventLoop())
loop.run()
def updateText(self, input):
self.txt.set_text(input)
def show_or_exit(self, key):
if key in ('q', 'Q'):
raise urwid.ExitMainLoop()
self.txt.set_text(repr(key))
if __name__ == '__main__':
MyApp()
和服务器代码:
import sys
import six
import datetime
from twisted.python import log
from twisted.internet import reactor
from twisted.internet.defer import inlineCallbacks
from twisted.internet.endpoints import serverFromString
from autobahn.wamp import types
from autobahn.twisted.util import sleep
from autobahn.twisted import wamp, websocket
class MyBackendComponent(wamp.ApplicationSession):
@inlineCallbacks
def onJoin(self, details):
## register a procedure for remote calling
def utcnow():
print("Someone is calling me;)")
now = datetime.datetime.utcnow()
return six.u(now.strftime("%Y-%m-%dT%H:%M:%SZ"))
reg = yield self.register(utcnow, u'com.timeservice.now')
print("Registered procedure with ID {}".format(reg.id))
## publish events to a topic
counter = 0
while True:
self.publish(u'com.myapp.topic1', counter)
print("Published event.")
counter += 1
yield sleep(1)
if __name__ == '__main__':
## 0) start logging to console
log.startLogging(sys.stdout)
## 1) create a WAMP router factory
router_factory = wamp.RouterFactory()
## 2) create a WAMP router session factory
session_factory = wamp.RouterSessionFactory(router_factory)
## 3) Optionally, add embedded WAMP application sessions to the router
component_config = types.ComponentConfig(realm="realm1")
component_session = MyBackendComponent(component_config)
session_factory.add(component_session)
## 4) create a WAMP-over-WebSocket transport server factory
transport_factory = websocket.WampWebSocketServerFactory(session_factory,
debug=False,
debug_wamp=False)
## 5) start the server from a Twisted endpoint
server = serverFromString(reactor, "tcp:8080")
server.listen(transport_factory)
## 6) now enter the Twisted reactor loop
reactor.run()
谢谢!
最佳答案
由于我没有足够的代表在评论中回复,所以我会在这里回复! oberstet 评论中给出的答案提示帮助我在没有任何全局变量的情况下正确地做到这一点! :)
谢谢
关于python - Urwid、autobahn 和 twisted eventloop 集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25376476/
尝试在 ListBox 顶部添加 BigText 时,我不断收到错误 AttributeError: 'BigText' object has no attribute 'rows'。我知道 BigT
在 urwid 中,如何动态更改调色板的颜色?例如,假设我想在按下“C”按钮时进行更改: import urwid def changeColor(key): if key in ('c',
我正在使用 urwid 设计一个 curses ui。我可以使用显示属性将文本显示为粗体、下划线或突出显示。是否可以使用斜体? 最佳答案 简答 理论上,是的。 在实践中:还没有。 长答案 基本上,cu
当用户按下 H 键时,我试图在我的 urwid 应用程序顶部显示一个帮助对话框,但我似乎无法让它消失。它显示没有问题。我错过了什么?我一整天都在做这件事。 我看过几个描述不同实现方法的例子。我玩过信号
我正在尝试使一个简单的 urwid 成为无限循环的输出屏幕。它需要输出来自另一个类的数据。 我现在找到的解决方案是:拥有一个带有 queue 属性的 Printer 类(实际输出类的测试替换器)。当它
我正在 urwid 中创建一个列表框,其中每个项目都是从 URL 列表中提取的 URL。当选择一个项目并单击 ENTER 时,我想提取 URL 并在浏览器中打开它。到目前为止,这是我的代码: clas
是否可以跟踪 urwid.ListBox 对象中高亮项的变化?或者甚至通过 ListWalker 对象? 我想在用户使用箭头键 [🠉]、[🠋] 从一个项目移动到另一个项目时调用回调,不是 当用户在
我正在使用 urwid,这是一个用于在 ncurses 中设计终端用户界面的 Python“框架”。不过有一件事我不能在 urwid 中做,而这在 curses 中很容易——使光标不可见。就像现在一样
我正在使用 urwid 库,到目前为止它非常棒。但我无法让进度条工作。我写了一个简单的测试程序,如下所示: import os import urwid # a function that t
我正在构建一个基于 Horizontal Menu 的应用程序来自 Urwid 的示例。我有一个项目,我想显示一些信息。我在下方有一个“确定”按钮,我希望它可以将菜单弹出回到之前的状态,或者重新启动整
有没有办法向用户显示 urwid 列表框在显示部分的上方/下方有其他项目? 我正在考虑类似滚动条的东西,它可以显示条目的数量。 或列表框顶部/底部的单独栏。 如果这个行为不能实现,有什么方法可以实现这
我正在用 Python 开发一个聊天程序,想为我的客户端添加一些用户友好的界面。事实是我给了自己挑战仅使用终端。 所以我找到了可以使用的 urwid 模块,它是跨平台的并且在网上有详细的文档。 看完模
我正在使用 Urwid 按钮,想知道是否有办法直接在按钮上处理按键事件? urwid.Button((item["customer"] + "/ " + item["case"]), button_p
我想实现一些提示,以确定当我向上或向下滚动时 urwid.ListBox 中的可见项目列表下方或上方是否仍有项目。仅当最后一个可见项目之后还有剩余项目时,“向下滚动”提示才应出现;当最后一个可见项目是
如果我进行以下调用: from urwid import raw_display cols, rows = raw_display.Screen().get_cols_rows() ... 文件描述符
我正在尝试编写一个具有不同 View 的程序。 我试图创建一个类来处理带有 urwid 的不同 View ,同时将 View 代码与其余部分分开。但经过多次不同的尝试,我不知道从哪里开始了。 我需要哪
与 urwid 混淆了。通过调整其中一个 urwid 示例,我得到了初始屏幕,并希望在按下 F5 键时执行 run_stuff() 函数,并显示指示 run_stuff() 正在运行并最终完成的消息(
我目前的权宜之计是将日志记录到一个文本文件中,但这不是很互动。我试过使用 pdb ,但这似乎与 urwid 不一致,pdb 一旦遇到断点就不会接受任何输入。 最佳答案 几个实践......调试 urw
是否可以将 ListBoxes 放入 SimpleListWalkers 中?我正在尝试制作嵌套的列表框,但出现此错误: AttributeError: 'MyListBox' 对象没有属性 'row
作为 Python 和 urwid 的新手,我尝试了这里的教程示例 http://excess.org/urwid/docs/tutorial/ 然而,虽然第一个确实工作正常,但大多数后来的似乎都不起
我是一名优秀的程序员,十分优秀!