2015-07-10 126 views
1

我需要一些提示找到一个python控制台应用程序中插入一个弹出窗口,一个简单的解决方案。
此应用程序通常无人值守运行,因为它是从crontab启动的。
它使用无处不在的日志来显示消息并将它们保存到日志文件。
然而,在某些情况下,应用程序需要用户干预的情况选择一些选项时,它是无法找到一个合适的。
这就是为什么我在插入一个argparse选择--interactive,当应用程序需要用户干预,在控制台弹出窗口应该出现,允许用户在列表中的一些项目中进行选择。
下面是输出的摘录给你一个例子:蟒蛇TUI弹出

INFO : Try to fuzzy-match 'Orange Itbn' 
INFO : Fuzzy-matched alternative entries : ['Orange Is The New Black'] 
INFO : Fuzzy matched 'Orange Itbn' as seriesname 'Orange Is The New Black' 
INFO : MOVE /Users/spadazz/testing/orange itbn.s03e10.hdtv.720p.mkv TO: 
/Volumes/NAS/TV Shows/Orange Is The New Black/S03/Orange Is The New Black.S03E10.hdtv.720p.mkv 
INFO : Try to fuzzy-match 'Sur' 
INFO : Fuzzy-matched alternative entries : ['Survivors 2008', 'Survivors'] 
WARNING : 
        Series 'Sur' not uniquely matched in titles 
        Choose between these titles : 
        ['Survivors 2008', 'Survivors'] 

WARNING : 
         ****************************************** 
         **** INSERT HERE THE CALL TO THE POPUP *** 
         ****************************************** 

现在,我读过有关Tkinter的,诅咒和npyscreen一些文档,但我没能拿出一些简单的用于此目的。
我不想混淆应用程序结构或将日志消息放在主窗口中。
我只是想要一个弹出窗口,允许我在一些选项之间进行选择,即使使用简单按键(如'1'和' 2'等...
这也应该是一个python解决方案,可能不需要从os调用外部命令。

任何想法??

感谢

回答

0

由于npyscreen被写入做出那种很简单的事情,我会使用npyscreen。 :)

这里的示例代码几乎是你问什么了:

http://npyscreen.readthedocs.org/introduction.html

+0

是npyscreen是非常强大的,但它是一个矫枉过正只是一个弹出式窗口,它要求你的整个应用程序必须进行相应的结构。 我的控制台应用程序写在标准输出一些输出,而其他TUI的工具,一旦他们initialize.so我的日志信息将被删除或覆盖,而不是通过一个弹出窗口暂时重叠重置整个屏幕。 –

1

与尼古拉斯·科尔,谁写npyscreen一点点帮助,我能解决这个问题:

import npyscreen as np 

class myPop(np.NPSApp): 

def setopt(self, title, oList, multi): 
    self.title = title 
    self.options = oList 
    self.multi = multi 
    self.height = len(self.options)+1 

def main(self): 
    F = np.Popup(name="Choose an option") 
    if self.multi: 
     opt = F.add(np.TitleMultiSelect, name=self.title, max_height=self.height, values=self.options, scroll_exit=True) 
    else: 
     opt = F.add(np.TitleSelectOne, name=self.title, max_height=self.height, values=self.options, scroll_exit=True) 
    F.edit() 
    self._values = opt.get_selected_objects() 
    self.result = (self._values if self.multi and len(self._values) > 1 else self._values[0]) 

def ChooseOption(title, oList, multi=False): 

    pop = myPop() 
    pop.setopt(title, oList, multi) 
    pop.run() 
    return pop.result 

# Show a popup with radiobuttons to select 1 item from a list 
print ChooseOption('choose a single element', ['a','b','c','d']) 

# Show a popup with radiobuttons to multi-select items from a list 
print ChooseOption('choose multi-elements', ['a','b','c','d'], True) 

希望这有助于。 恩里科