python – curses – 在较大的终端中看不到addstr文本

python – curses – 在较大的终端中看不到addstr文本,第1张

概述我正在编写一个使用 Python的curses库的IRC客户端,但是服务器的响应在屏幕上输出不正确. 基本上,我的终端越小,输出越接近它应该是: 在全尺寸终端(1366×768分辨率)上基本没有输出 在半尺寸的终端上,有更多可见的输出 在一个四分之一大小的终端上,该程序会输出我期望的所有内容. 根据这种模式,我最好的猜测是一些行长问题,但我真的不知道问题是什么. 源代码 import curses 我正在编写一个使用 Python的curses库的IRC客户端,但是服务器的响应在屏幕上输出不正确.

基本上,我的终端越小,输出越接近它应该是:

在全尺寸终端(1366×768分辨率)上基本没有输出

在半尺寸的终端上,有更多可见的输出

在一个四分之一大小的终端上,该程序会输出我期望的所有内容.

根据这种模式,我最好的猜测是一些行长问题,但我真的不知道问题是什么.

源代码

import cursesimport queueimport socketimport threadingimport timePAD_LENGTH = 1000def main(stdscr):    s = socket.create_connection(("chat.freenode.net",6667))    s.settimeout(1.0)    s.send(b"PASS hello\r\n")    s.send(b"NICK testingclIEnt\r\n")    s.send(b"USER testingclIEnt tclIEnt tclIEnt :Test ClIEnt\r\n")    s.setblocking(False)    curses.noecho()    curses.cbreak()    stdscr.nodelay(1)    pad = curses.newpad(PAD_LENGTH,curses.ColS-1)    top = 0    while True:        try:            msg = s.recv(512).decode("latin-1")            pad.addstr(msg)        except BlockingIOError:            pass        kc = stdscr.getch()        if kc != -1:            k = chr(kc)            if k == "q":                break            elif k == "j" and top < PAD_LENGTH:                top += 1            elif k == "k" and top > 0:                top -= 1        pad.refresh(top,curses.lines-1,curses.ColS-1)    s.close()    curses.nocbreak()    curses.echo()    curses.enDWin()curses.wrapper(main)

其他笔记

我在VirtualBox的Arch linux上使用i3和xterm

解决方法 lines和ColS值在任何意义上都不是魔术;它们由curses库根据终端大小(来自 *** 作系统)进行初始化,并且可以通过设置环境变量(名为$lines和$ColUMNS)来覆盖(通常).有关更多信息,请阅读 use_env的手册页

如果您的应用程序具有更窄的格式可读性,那么您始终可以在脚本中检查ColS的值并限制传递给curses.newpad的值:

pad = curses.newpad(PAD_LENGTH,curses.ColS-1)

比方说,你应该在那个调用中使用自己的变量(ColS的副本),并在这里对ColS的另一个引用中重用它:

pad.refresh(top,curses.ColS-1)

正如所指出的那样,使用环境变量来 *** 纵这个是你可以做的事情 – 但它并不经常使用.请记住,如果将$lines和/或$ColUMNS设置为大于终端提供的值,结果将不会很好.

回顾一下评论(还有其他可能相关的陷阱,但我没有合适的配置来测试你的脚本):

> pad与stdscr不是同一块内存.给定窗口上的getch告诉curses刷新该窗口.因此,如果窗口上有挂起的更改,它将覆盖任何其他窗口,因为curses库将数据复制到curscr.>另一个潜在的问题是,如果你的addtr写了换行符. addch / addstr中的换行符将清除该行的其余部分.

总结

以上是内存溢出为你收集整理的python – curses – 在较大的终端中看不到addstr文本全部内容,希望文章能够帮你解决python – curses – 在较大的终端中看不到addstr文本所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1197235.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存