2013-05-13 26 views
0

在此程序的早期版本中,echo()工作正常,但在重写之后停止工作。 我能想到的唯一可能是相关的是,主窗口(self.screen)现在是一个pad而不是stdscr。curses.echo()在窗口变为填充后在curses中停止工作

其他一切正在工作,因为它应该和以前一样;当我按一个选择输入时,我可以输入一个字符串,当我完成时,字符串就在我输入的地方。它只是没有回应,当我键入或粘贴,我不能看到它,直到getstr()完成。我不明白为什么。对我来说,这应该都像回声()/ noecho()一样简单..

我错过了什么,或者这是一个错误?

(我知道有这个PEP8代码犯规comly。我会解决,最终)

在旧版本的工作!:

 if q == ord("\n"): 
      if selection >= 0: 
       target_value = values[selection][0] 
       screen.timeout(-1) 
       curs_set(1) 
       curs_pos = values[selection][1] 
       screen.move(curs_pos[0], curs_pos[1]) 
       screen.clrtoeol() 
       echo() 
       if selection == 0: 
        self.TargetDict[Target].Name = screen.getstr() 
       if selection == 1: 
        new_ip = screen.getstr() 
       if selection == 2: 
        self.TargetDict[Target].CPE = screen.getstr() 
       if selection == 3: 
        self.TargetDict[Target].Inc = screen.getstr() 
       if selection == 4: 
        self.TargetDict[Target].Inst_ID = screen.getstr() 
       if selection == 5: 
        self.TargetDict[Target].Span_ID = screen.getstr() 
       noecho() 
       curs_set(0) 
       screen.timeout(300)  

     self.screen.addstr(0,0, str(counter)) 
     counter += 1 
     self.screen.refresh() 

不工作! :

 if q == ord("\n"): 

      if selection >= 0: 
       target_value = values[selection][0] 
       self.screen.timeout(-1) 
       curs_set(1) 
       self.screen.move(values[selection][1][0], values[selection][1][1]) 
       self.screen.clrtoeol() 
       curses.echo() 
       self.screen.refresh(0, 0, 0, 0, self.y_max-1, self.x_max-1) 

       if selection == 0: 
        self.TargetDict[Target].Name = self.screen.getstr() 
       if selection == 1: 
        #not used. Can't change target address 
        new_ip = self.screen.getstr() 
       if selection == 2: 
        self.TargetDict[Target].CPE = self.screen.getstr() 
       if selection == 3: 
        self.TargetDict[Target].Inc = self.screen.getstr() 
       if selection == 4: 
        self.TargetDict[Target].Inst_ID = self.screen.getstr() 
       if selection == 5: 
        self.TargetDict[Target].Span_ID = self.screen.getstr() 

       noecho() 
       curs_set(0) 
       self.screen.timeout(300) 
       self.update_details(Target, option) 
       self.screen.refresh(0, 0, 0, 0, self.y_max-1, self.x_max-1) 

这是整个功能

def Details(self, scr, Target): 

    self.screen.clear() 
    screen = scr 
    curs_set(0)   

    #This list is used to control the highlight of selected item in the program. 
    option = [0]*6 

    # valuesList is [Targetvalue, (co-ordinates), max-lenght of string] 
    values = [ 
       [self.TargetDict[Target].Name, (1,0), 38], 
       [self.TargetDict[Target].IP, (3,12), 15], 
       [self.TargetDict[Target].CPE, (4,12), 15], 
       [self.TargetDict[Target].Inc, (5,12), 10], 
       [self.TargetDict[Target].Inst_ID, (6,12), 10], 
       [self.TargetDict[Target].Span_ID, (7,12), 6], 
      ] 
    counter = 0  #For testing 

    selection = -1 
    curs_pos = (0,0) 

    Details = True 

    self.update_details(Target, option) 

    while Details: 

     q = self.screen.getch() 

     if q == ord("b") or q == ord("q"): 
      Details = False 

     if q == KEY_DOWN: 
      if selection < 5 : 
       selection += 1 
       option[selection] = A_REVERSE 
       if selection > 0 : 
        option[selection-1] = 0 
      self.update_details(Target, option) 

     if q == KEY_UP: 
      if selection >= 0 : 
       selection -= 1 
       if selection == -1: 
        option[0] = 0 
       else: 
        option[selection] = A_REVERSE 
        option[selection + 1] = 0 
      self.update_details(Target, option) 

     if q == ord("\n"): 

      if selection >= 0: 
       target_value = values[selection][0] 
       self.screen.timeout(-1) 
       curs_set(1) 
       self.screen.move(values[selection][1][0], values[selection][1][1]) 
       self.screen.clrtoeol() 
       curses.echo() 
       self.screen.refresh(0, 0, 0, 0, self.y_max-1, self.x_max-1) 

       if selection == 0: 
        self.TargetDict[Target].Name = self.screen.getstr() 
       if selection == 1: 
        #not used. Can't change target address 
        new_ip = self.screen.getstr() 
       if selection == 2: 
        self.TargetDict[Target].CPE = self.screen.getstr() 
       if selection == 3: 
        self.TargetDict[Target].Inc = self.screen.getstr() 
       if selection == 4: 
        self.TargetDict[Target].Inst_ID = self.screen.getstr() 
       if selection == 5: 
        self.TargetDict[Target].Span_ID = self.screen.getstr() 

       noecho() 
       curs_set(0) 
       self.screen.timeout(300) 
       self.update_details(Target, option) 
       self.screen.refresh(0, 0, 0, 0, self.y_max-1, self.x_max-1) 

     self.update_details(Target, option)    
     self.screen.addstr(0,0, str(counter)) 
     counter += 1 
     self.screen.refresh(0, 0, 0, 0, self.y_max-1, self.x_max-1) 

回答

0

这只是我不读文档不够好。

甲垫就像一个窗口,不同之处在于它不是由屏幕大小的限制,并且不必然 与屏幕的特定部分相关联。当需要大窗口时,可以使用焊盘,并且一次只能在屏幕上显示一部分窗口。 不会发生垫的自动刷新(例如滚动或回显输入)。填充的refresh()和noutrefresh()方法需要6个参数来指定要显示的填充部分以及要用于显示的屏幕位置。

问题通过使用newwin()来解决,我需要使用echo()来代替重写pad-window。

+0

你可以添加一个代码示例吗?我试图将echo添加到一个新窗口,但似乎我没有这样做,我跳了一个代码示例将有所帮助。谢谢。 – 2015-02-06 08:55:28

相关问题