Python的Urwid问题set_alarm

问题描述:

我遇到了使用库urwid的set_alarm问题。基本上,当你运行它并击中查普曼时,你会得到下面的错误。我对urwid知之甚少,似乎缺乏文档,我试图寻找可以比较的例子,但是我找不到任何东西。Python的Urwid问题set_alarm

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'▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ 

后一千年的组合,我终于得到了它。知识?我随机地将黑客代码保存在一起,直到它最终像bruteforce猜测一样工作。

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

好吧,结束咆哮。这是为了那些因为别人不会帮助你而挣扎的人。

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

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

它期望一个文本编辑或其他东西。你不能在窗口部件中调用一个函数。为什么?没有线索。询问Urwid社区,如果你甚至可以得到一个单一的回应。继续前进

通过创建预留,您可以创建一个var说“self.x = urwid.Text(”“)”,其中没有任何内容,我认为它保留了它。之后,你通过创建一个告警来创建一个告警self.test.set_alarm_in(4)

然后它会调用函数test()4秒左右。所以你可以很容易地把self.x.set_text(“你好世界”),它应该工作。