我需要一些提示来找到一个简单的解决方案来插入一个python控制台应用程序内的弹出窗口。
此应用程序通常在无人值守的情况下运行,因为它是从crontab启动的。
它使用everywhere日志来显示消息并将它们保存到日志文件中。
然而,在某些情况下,当找不到合适的选项时,应用程序需要用户干预来选择一些选项。
这就是为什么我在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调用外部命令。
有什么想法吗?
谢谢
发布于 2015-07-13 02:45:45
在写了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)希望这能有所帮助。Enrico
发布于 2015-07-10 21:49:27
因为npyscreen就是为了让这类事情变得非常简单而写的,所以我会使用npyscreen。:)
example code here几乎就是您所要求的。
https://stackoverflow.com/questions/31338920
复制相似问题