- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在编写一个使用 Python 的 curses 库的 IRC 客户端,但是服务器的响应没有在屏幕上正确输出。
基本上,我的终端越小,输出就越接近它应该的样子:
在全尺寸终端(1366x768分辨率)上基本没有输出
在一半大小的终端上,有更多可见的输出
在四分之一大小的终端上,程序输出了我期望的所有内容。
根据这个模式,我最好的猜测是一些行长度问题,但我真的不知道问题是什么。
import curses
import queue
import socket
import threading
import time
PAD_LENGTH = 1000
def 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,0,0,0,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)
比如说,到 40。您应该在该调用中使用您自己的变量(COLS 的副本),并在此处对 COLS 的其他引用中重用它:
pad.refresh(top,0,0,0,curses.LINES-1,curses.COLS-1)
如前所述,您可以使用环境变量对其进行操作——但并不经常使用。请记住,如果您将 $LINES 和/或 $COLUMNS 设置为大于终端提供的值,结果将不会很好。
回顾一下评论(还有其他可能相关的陷阱,但我没有合适的配置来测试您的脚本):
关于python - curses - addstr 文本在较大的终端中不可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28669929/
我正在重新创建this使用curses 库在python 中进行终端游戏。只要未按下某个键,stdscr.addstr() 就会返回错误。 这似乎是因为光标在这些帧期间离开屏幕(在右下角),但我根本不
我正在编写一个使用 Python 的 curses 库的 IRC 客户端,但是服务器的响应没有在屏幕上正确输出。 基本上,我的终端越小,输出就越接近它应该的样子: 在全尺寸终端(1366x768分辨率
出于某种原因,如果我使用 AddString 将字符串添加到 GraphicsPath,字体将比在字体对话框中看起来要小。 SizeF sz = g.MeasureString(Text, new
这个有效: #!/usr/bin/env perl use warnings; use 5.012; use Curses; initscr(); addstr( 5, 5, 'Hello, Worl
使用这些创建: self.pads = [] self.pads.append( [ server, channel, curses.newpad(height - 2, width) ] ) 问题函
当我注意到最奇怪的问题(如果你愿意,a整个程序的大量评论副本如下)。简而言之,当接受 os.listdir 生成的列表的结果时,curses 崩溃并出现 addstr 错误,但是,如果我给它提供一个硬
伪代码: CListBox listBox; CString[10] str; //consider it is initialised with valid string for(int i=0;
我正在创建一个 MFC 应用程序并尝试在对话框类中添加列表框。当我使用调试配置时,出现错误并且应用程序崩溃。当我使用发布配置时,对话框出现了,但是是空的。 我刚开始用这个,所以我的代码是基本的: //
这个问题在这里已经有了答案: 关闭 14 年前。 我有一个对话框,其中有几个较大的组合框(每个可能有数百个项目)。当这些被填充时,构建有明显的延迟(通过分析确认是它们)。 我最初的想法是排序会降低它
本文整理了Java中bibliothek.util.xml.XElement.addString()方法的一些代码示例,展示了XElement.addString()的具体用法。这些代码示例主要来源于
本文整理了Java中org.testng.reporters.XMLStringBuffer.addString()方法的一些代码示例,展示了XMLStringBuffer.addString()的具
我有代码女巫将当前工作进程添加到组合框,我想排除名称为:svchost.exe 的所有进程 if (Process32First(hSnap, &proc)) { pComboBox->Add
我正在尝试使用 Python 编写一个脚本,只要您按下空格键,它就会将所有键入的字符转换为“a”。例如,我输入“python”,然后输入空格,然后“python”将转换为“aaaaaa”。 impor
知道为什么最近的 Windows 更新之一会导致 GraphicsPath.AddString() 和某些字体出现问题但仅限于特定字符吗?如何解决? 示例字体为 Thin Pencil Handwri
有人知道或用过 Hadoop API 中的 copyMerge 函数 - FileUtil 吗? copyMerge(FileSystem srcFS, Path srcDir, FileSystem
我需要在我的 WPF 应用程序中从字符串生成图像,并显示它。这是我的代码: // Create Image and generate string on it System.Windows.Contr
我正在Python中使用curses编写一个非常简单的农业游戏。此时,我已经成功地允许玩家(只是一个“@”字符)在窗口内移动。 我有一些带有 ascii-art 的文件,我将它们打印到窗口,作为填充玩
我知道如何使用 print() 函数来打印 unicode 字符,但我不知道如何使用 stdscr.addstr() 来打印 我在 Linux 操作系统上使用 python 2.7 谢谢 最佳答案 我
在声明 10 x 10 pad 之后,我显然无法写入右下角 9、9 而不会出现错误。这是怎么回事? import curses def start(stdscr): curses.curs_s
我是一名优秀的程序员,十分优秀!