诅咒.回声()窗户成了垫子后,诅咒地停止了工作

2024-04-19 12:31:38 发布

您现在位置:Python中文网/ 问答频道 /正文

在这个程序的早期版本中,echo()可以正常工作,但在一些重写之后停止工作。 我唯一能想到的是主窗口(自身屏幕)现在是一个垫子而不是stdscr。在

其他的一切都像以前一样工作;当我在一个选择上按enter键时,我可以输入一个字符串,当我输入时,字符串就在那里了。当我输入或粘贴时,它只是不回显它,直到getstr()完成我才能看到它。我不明白为什么。在我看来,这一切都应该像echo()/noecho()一样简单。。在

是我漏掉了什么还是这是个虫子?在

(我知道这个代码与pep8不兼容。我最终会解决的)

在旧版本中工作!公司名称:

        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()

不工作了!公司名称:

^{pr2}$

这就是整个功能

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)

Tags: selfidtargetifcounterupdatescreenmax
1条回答
网友
1楼 · 发布于 2024-04-19 12:31:38

这只是我没有很好地阅读文档。在

A pad is like a window, except that it is not restricted by the screen size, and is not necessarily associated with a particular part of the screen. Pads can be used when a large window is needed, and only a part of the window will be on the screen at one time. Automatic refreshes of pads (such as from scrolling or echoing of input) do not occur. The refresh() and noutrefresh() methods of a pad require 6 arguments to specify the part of the pad to be displayed and the location on the screen to be used for the display.

只需在需要启用echo()的部分中使用newwin()而不是重写pad窗口,就解决了这个问题。在

相关问题 更多 >