4

我在使用库 urwid 时遇到了 set_alarm 问题。基本上,当您运行它并在 Chapman 上按 Enter 时,您将收到以下错误。我对 urwid 了解不多,而且它似乎缺乏文档,我试图寻找示例进行比较,但找不到任何示例。

import urwid
import pyfiglet

class data():

drpepper = pyfiglet.Figlet(font='doom')
choices = u'Chapman Cleese Gilliam Idle Jones Palin'.split()

def menu(self, title, choices):
    body = [urwid.Text(title), urwid.Divider()]
    for c in choices:
        button = urwid.Button(c)
        if c == "Chapman":
            urwid.connect_signal(button, 'click', self.info, c)
        body.append(urwid.AttrMap(button, None, focus_map='reversed'))
    return urwid.ListBox(urwid.SimpleFocusListWalker(body))

def item_chosen(self, button, choice):
    response = urwid.Text([u'You chose ', choice, u'\n'])
    done = urwid.Button(u'Ok')
    urwid.connect_signal(done, 'click', info)
    main.original_widget = urwid.Filler(urwid.Pile([response, urwid.AttrMap(done, None, focus_map='reversed')]))

def info(self, button, choice):
    response = urwid.Text(self.drpepper.renderText("text"), align="center")
    response2 = urwid.Text("Test")
    with open("/home/jt/works?.txt", "a+") as data:
        data.write("THIS IS A TEST 2")
    done = urwid.Button(u'Ok')
    self.main.original_widget = urwid.Filler(urwid.Pile([self.loop.set_alarm_in(5, response), response2]))

def exit_program(self, button):
    raise urwid.ExitMainLoop()

def mainish(self):
    main = urwid.Padding(self.menu(u'Pythons', self.choices), left=2, right=2)
    top = urwid.Overlay(main, urwid.SolidFill(u'\N{MEDIUM SHADE}'),
        align='center', width=('relative', 60),
        valign='middle', height=('relative', 60),
        min_width=20, min_height=9)
    self.loop = urwid.MainLoop(top, palette=[('reversed', 'standout', '')])
    self.loop.run()

开始 = 数据() start.mainish()

这是错误

    ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒  < Traceback (most recent call last):                                                              
  File "urwidtest.py", line 46, in <module>▒▒▒▒  < Cleese                                                                                          
    crap.mainish()▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒  < Gilliam                                                                                         
  File "urwidtest.py", line 42, in mainish▒▒▒▒▒  < Idle                                                                                            
    self.loop.run()▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒  < Jones                                                                                           
  File "/usr/local/lib/python3.4/dist-packages/urwid/main_loop.py", line 278, in run                                                               
    self._run()▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒                                                                                                    
  File "/usr/local/lib/python3.4/dist-packages/urwid/main_loop.py", line 375, in _run                                                              
    self.event_loop.run()▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒                                                                                                    
  File "/usr/local/lib/python3.4/dist-packages/urwid/main_loop.py", line 678, in run                                                               
    self._loop()▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒                                                                                                    
  File "/usr/local/lib/python3.4/dist-packages/urwid/main_loop.py", line 715, in _loop                                                             
    self._watch_files[fd]()▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒                                                                                                    
  File "/usr/local/lib/python3.4/dist-packages/urwid/raw_display.py", line 392, in <lambda>                                                        
    event_loop, callback, self.get_available_raw_input())                                                                                          
  File "/usr/local/lib/python3.4/dist-packages/urwid/raw_display.py", line 492, in parse_input                                                     
    callback(processed, processed_codes)▒▒▒▒▒▒▒                                                                                                    
  File "/usr/local/lib/python3.4/dist-packages/urwid/main_loop.py", line 399, in _update                                                           
    self.process_input(keys)▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒                                                                                                    
  File "/usr/local/lib/python3.4/dist-packages/urwid/main_loop.py", line 499, in process_input                                                     
    k = self._topmost_widget.keypress(self.screen_size, k)                                                                                         
  File "/usr/local/lib/python3.4/dist-packages/urwid/container.py", line 592, in keypress                                                          
    *self.calculate_padding_filler(size, True)), key)                                                                                              
  File "/usr/local/lib/python3.4/dist-packages/urwid/decoration.py", line 621, in keypress                                                         
    return self._original_widget.keypress(maxvals, key)                                                                                            
  File "/usr/local/lib/python3.4/dist-packages/urwid/listbox.py", line 985, in keypress                                                            
    key = focus_widget.keypress((maxcol,),key)▒                                                                                                    
  File "/usr/local/lib/python3.4/dist-packages/urwid/wimp.py", line 535, in keypress                                                               
    self._emit('click')▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒                                                                                                    
  File "/usr/local/lib/python3.4/dist-packages/urwid/widget.py", line 463, in _emit                                                                
    signals.emit_signal(self, name, self, *args)                                                                                                   
  File "/usr/local/lib/python3.4/dist-packages/urwid/signals.py", line 264, in emit                                                                
    result |= self._call_callback(callback, user_arg, user_args, args)                                                                             
  File "/usr/local/lib/python3.4/dist-packages/urwid/signals.py", line 294, in _call_callback▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
    return bool(callback(*args_to_pass))▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  File "urwidtest.py", line 30, in info▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
    self.main.original_widget = urwid.Filler(urwid.Pile([self.loop.set_alarm_in(5, response), response2]))▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  File "/usr/local/lib/python3.4/dist-packages/urwid/container.py", line 1253, in __init__▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
    if focus_item is None and w.selectable():▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
AttributeError: 'function' object has no attribute 'selectable'▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
4

1 回答 1

0

经过一千种组合,我终于得到了它。知识?我随机不断地破解代码,直到它最终像一个蛮力猜测一样工作。

最后,经过无尽的时间,这将花费你们几分钟来发布一些东西。我喜欢 python 的支持社区(讽刺)......当我无法得到答案时,我喜欢人们声称它有一个很棒的支持社区。

好了,吐槽结束。这适用于那些正在苦苦挣扎的人,因为没有其他人会帮助您。

self.main.original_widget = urwid.Filler(urwid.Pile([self.loop.set_alarm_in(5, response), response2]))

在这里您可以看到 main.original_widget 清除屏幕并保留在一个位置。我无法清楚地解释为什么,因为没有人会提供帮助。但是,我意识到你必须创建一个储备。

它需要文本编辑或其他东西。您不能在小部件内部调用函数。为什么?没有线索。询问 Urwid 社区是否可以得到一个回复​​。继续

通过创建储备,您可以创建一个变量,说“self.x = urwid.Text("")”,其中没有任何内容,我认为它会保留它。之后,您通过创建 self.test.set_alarm_in(4) 来创建警报

然后它将在 4 秒左右的时间内调用函数 test()。所以你可以很容易地把 self.x.set_text("hello world") 和它应该工作。

于 2015-07-03T16:09:23.157 回答