2012-10-08 25 views
1

我正在为CubeSat创建一个基本的地面控制站,将其分为两部分:COMMANDS(没有问题)和TELEMETRY。我使用C代码和GTK;在遥测窗口中,我需要每次收到遥测数据包时都会显示一些信息,所以我试图对每个信息使用gtkview/gtkentry,但我不知道如何更新显示在其中的消息。GTK - 如何更新gtktextview/gtkentry? #C

特别是,一个例子是:

//View PACKET NUMBER  
view = gtk_text_view_new(); 
frame = gtk_frame_new("Packet number");  
gtk_container_add(GTK_CONTAINER(frame), view); 
gtk_text_view_set_editable(GTK_TEXT_VIEW(view),FALSE); 
gtk_table_attach(GTK_TABLE(table2),frame,0,1,0,1,GTK_FILL,GTK_FILL,5,5); 
buff = gtk_text_view_get_buffer(GTK_TEXT_VIEW(view)); 
gtk_text_buffer_get_iter_at_offset(buff, &iter, 0); 
gtk_text_buffer_insert(buff, &iter,"waiting", -1); 

所以,首先有“等待”的文字,那么当收到一个包时我想更新文字:我怎样才能做到这一点?

我试着重复这个代码,但不断变化的“等待”与变量指“包号”,但我得到核心转储

我也试着与此代码,但我一直同样的问题。

viewprova = gtk_entry_new(); 
frameprova = gtk_frame_new("Packet number"); 
gtk_container_add(GTK_CONTAINER(frameprova), viewprova); 
gtk_entry_set_editable(GTK_ENTRY(viewprova),FALSE); 
gtk_table_attach(GTK_TABLE(table2),frameprova,0,1,0,1,GTK_FILL,GTK_FILL,5,5); 
gtk_entry_set_text(GTK_ENTRY(viewprova),"waiting"); 



frameprova = gtk_frame_new("Packet number");  
viewprova = gtk_label_new ("waiting"); 
gtk_container_add(GTK_CONTAINER(frameprova), viewprova); 
gtk_table_attach(GTK_TABLE(table2),frameprova,0,1,0,1,GTK_FILL,GTK_FILL,5,5); 

感谢您的帮助!

+0

你是什么意思你试过“重复这个代码“?你当然没有创建一个全新的Frame + TextView来更新文本。你可以发布你用来更新TextView的代码吗? – Ancurio

+0

要更新TextView,我使用了相同的代码...我知道这是问题,但我不知道如何正确执行! 周期1 =我用“等待”文本创建文本视图 周期2 =我如何更新它?我已经尝试使用相同的代码(这是我上面报告的第一个代码,但“等待”改变了我想要显示的文本),但它没有工作(核心转储) – geomerlin

回答

0

接受C字符串的函数如gtk_label_new()不能取整数,C函数不是多态。您需要构建一个字符串表示形式并通过该表示形式,例如使用snprintf()将该数字格式化为字符串缓冲区。

+0

没关系,但我也有试着用另一个文本(试图)改变firts文本(等待),但它总是让我心跳。 – geomerlin

0

好的,所以如果我正确地理解了你,你知道如何设置你的文本显示小部件,但不是,如何填充新的内容,正确?看看你的代码,以及你在做什么。首先,您正在创建一个文本小部件。然后你用初始文本填充它。这第二部分是要重复一个:

GtkEntry情况下,gtk_entry_set_text(GTK_ENTRY(viewprova), "My new text");

GtkTextView情况下(实际上你使用底层TextBuffer),gtk_text_buffer_set_text(buff, "My new text", -1);

+0

谢谢,我会试试这个!可能我关闭了我创建界面的部分,所以在我无法修改之后! – geomerlin