1

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

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、curses 和 npyscreen 的文档,但我无法为此目的想出一些简单的东西。
我不想弄乱应用程序结构或将日志消息放在主窗口中。
我只想弹出一个允许我在一些选项之间进行选择的弹出窗口,即使是像“1”和“2”这样的简单按键也是如此。 ..
这也应该是一个python解决方案,可能不需要从os调用外部命令。

有任何想法吗 ??

谢谢

4

2 回答 2

1

在编写 npyscreen 的 Nicholas Cole 的帮助下,我能够解决这个问题:

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)

希望这可以帮助。恩里科

于 2015-07-12T18:45:44.577 回答
0

由于编写 npyscreen 是为了使这种事情变得非常简单,因此我会使用 npyscreen。:)

这里的示例代码几乎正是您所要求的。

于 2015-07-10T13:49:26.740 回答