QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1388|回复: 6

[GTK求教]如何动态显示文本?

[复制链接]
发表于 2004-4-7 11:01:11 | 显示全部楼层 |阅读模式
[GTK求教]如何动态显示文本?

我想让Label构件中的文本内容动态改变,请问如何可以实现?
我写了一点代码如下:

for(i = 0; i < n; i++)
{
string = 'a';
string[i+1] = '\0';
gtk_label_set_text(GTK_LABEL(lbl1), string);
}

但是结果只是显示循环结束后的string字符串,循环中的字串都显示不出来?
这是为何?

望高手指教!
谢谢
发表于 2004-4-7 12:20:50 | 显示全部楼层
对GTK我不熟,所以原谅不对之处
1. 你的语句只是改变了lbl1这个小部件的的状态,但并未改变它在屏幕上的显示,所以要刷新
2. 假如每秒刷新100次,以人的视力,你如何能看见中间的变化?
回复

使用道具 举报

发表于 2004-4-7 15:16:55 | 显示全部楼层
gtk不走完(gtk_main()里的)一个循环好像是不会刷新窗口及控件的,你上面那个for语句虽然循环了好几次,但gtk_main()在for执行完后才完成一次,并刷新相应区域。
另外你的for循环里没有延时,即使gtk能马上刷新你也看不出来呀,太快了。
你可以在for语句里加一个gdk_flush()试试能不能刷新,依我的经验刷新不了。
回复

使用道具 举报

发表于 2004-4-7 16:21:40 | 显示全部楼层
在最后一个}前加上:
while(gtk_events_pending()){
   gtk_main_iteration();
}
sleep(1);
不过你的整个结构不太好。其它部份容易阻塞。
回复

使用道具 举报

发表于 2004-4-7 22:39:52 | 显示全部楼层
[quote:b0c823757c="sagaeon"]在最后一个}前加上:
while(gtk_events_pending()){
   gtk_main_iteration();
}
sleep(1);
不过你的整个结构不太好。其它部份容易阻塞。[/quote]
强呀,我用了那么久gtk,居然没发现这个,呵呵
回复

使用道具 举报

发表于 2004-4-8 11:12:16 | 显示全部楼层
如果是计算密集型的程序,我想,应该有两个进程或线程,一个负责屏幕刷新与鼠标与健盘事件响应,另一个做很占资源的事,两者之间用进程间通信或其它方式通信。
没什么经验,不知其它同仁有什么高见。
回复

使用道具 举报

发表于 2004-4-8 12:45:01 | 显示全部楼层
同意,创建子进程去完成耗资源的工作,这样gui不会跟死了一样
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-8 16:38 , Processed in 0.054202 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表