python主循环方法mainloop_python-动态更改urwid.MainLoop小部件的首选方法

我不确定您的示例代码中有多少代表原始代码,但是您似乎想熟悉一个示例小部件,它一次只显示一行文本内容,因此您熟悉the technique of using urwid’s custom widgets wrapping text widgets, as shown in the answer.

这是一个在与urwid和Python相适应的设计中编写类似于您提供的示例代码的示例:

#!/usr/bin/env python

# -*- coding: utf-8 -*-

from __future__ import print_function, absolute_import, division

import urwid

from random import randint

class RandomNumberWidget(urwid.WidgetWrap):

def __init__(self):

self.random_number = None

self.text_widget = urwid.Text(u'')

super(RandomNumberWidget, self).__init__(self.text_widget)

def roll(self):

self.random_number = randint(0, 100)

self.update()

def update(self):

"""Update UI

"""

if self.random_number is None:

self.text_widget.set_text('No number set')

else:

self.text_widget.set_text('Random number: %s' % self.random_number)

class App(object):

def __init__(self):

self.random_number_widget = RandomNumberWidget()

top_message = 'Press any key to get a random number, or q to quit

'

widget = urwid.Pile([

urwid.Padding(urwid.Text(top_message),

'center', width=('relative', len(top_message))),

self.random_number_widget,

])

self.widget = urwid.Filler(widget, 'top')

def play(self):

self.random_number_widget.roll()

def play_or_exit(self, key):

if key in ('q', 'Q', 'esc'):

raise urwid.ExitMainLoop()

app.play()

if __name__ == '__main__':

app = App()

loop = urwid.MainLoop(app.widget, unhandled_input=app.play_or_exit)

loop.run()

还取决于您实际想要执行的操作,使自定义窗口小部件响应键盘事件可能是有意义的,而不是在全局处理程序中完成所有操作(对于简单程序IMO来说完全没问题).

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值