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会导致整个窗口刷新。
看来还是自己太粗心了!


...全文
293 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
jinpengfei 2007-03-11
  • 打赏
  • 举报
回复
感谢楼主,问题虽然小但很烦人,解决了就好
深圳花卉租摆
ChumpKlutz 2007-03-07
  • 打赏
  • 举报
回复
感谢楼主把自己的心得写出来与大家分享
iambic 2007-03-07
  • 打赏
  • 举报
回复
呵呵,所有界面编程序的常见错误。

37,721

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧