Curses中屏幕频繁刷新的问题的解决

huanzhugege 2007-03-07 09:32:40
在开发过程中我发现终端屏幕频繁的刷新,看上去闪的厉害。使用截包工具(我用的是EtherDetect Packet Sniffer,在Sniffer单机端口数据的时候比Sniffer Pro易用)分析发现,每次更新一个子窗口的时候竟然整个屏幕都被刷新了,数据量非常大。为了发现问题,我编写了下面的测试程序:
from ACursesEX import *
import curses

def main():
mainwin = curses.newwin(15,50,0,0)
mainwin.box()

mainwin.addstr(0,0,"主窗口")
mainwin.refresh()

cwin = curses.newwin(5,20,2,2)
cwin.addstr(1,1,"子窗口")
cwin.box()
cwin.refresh()
while(True):
ch = cwin.getch()
cwin.clear()
cwin.addch(2,1,ch)
cwin.touchwin()
cwin.refresh()


try:
initapp()
try:
main()
except:
traceback.print_exc()
finally:
endapp()

经测试每一次按键的时候屏幕的数据都刷新一次,经过尝试发现把cwin.clear()改成cwin.erase()就不会出现这种问题了。查看curses的API说明才发现自己犯了一个大错误:
clear( ) :
Like erase(), but also causes the whole window to be repainted upon next call to refresh().

也就是说erase只会使子窗口刷新,而clear会导致整个窗口刷新。
看来还是自己太粗心了!


...全文
220 3 打赏 收藏 举报
写回复
3 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
jinpengfei 2007-03-11
感谢楼主,问题虽然小但很烦人,解决了就好
深圳花卉租摆
  • 打赏
  • 举报
回复
ChumpKlutz 2007-03-07
感谢楼主把自己的心得写出来与大家分享
  • 打赏
  • 举报
回复
iambic 2007-03-07
呵呵,所有界面编程序的常见错误。
  • 打赏
  • 举报
回复
相关推荐
发帖
脚本语言
加入

3.7w+

社区成员

JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
申请成为版主
帖子事件
创建了帖子
2007-03-07 09:32
社区公告

CSDN 脚本语言社区接受专栏投稿(专栏会在顶部创建专属你的栏目),投稿需满足以下要求:

  • 脚本语言技术相关;
  • 文章持续更新,保持活跃;
  • 内容清晰明了,干货为主;
  • 文章排版有序,有条有理。

本社区开通招聘专栏,发布招聘信息请联系版主,发布者需要保证招聘信息真实有效,CSDN 平台和版主不对招聘内容负责!

联系方式:私聊版主、发送邮件、QQ联系等均可: