2015-07-10 66 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) 

希望這有助於。 恩里科