LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1628|回复: 13

text view 相关,文本框。

[复制链接]
发表于 2004-6-27 10:34:39 | 显示全部楼层 |阅读模式

  1. #include <gtk/gtk.h>

  2. /*
  3. 串口测试精灵:leftright 是版权协议。

  4. */

  5. /*
  6. 创建列表项,方便选择端口及相关配制
  7. */

  8. static GtkWidget *text;

  9. GtkWidget *create_item(gint i)
  10. {
  11.         GtkWidget *item;
  12.         GtkWidget *hbox;
  13.         GtkWidget *label;
  14. }

  15. int main(int argc, char* argv[])
  16. {
  17.         GtkWidget *window;        //窗口
  18.         GtkWidget *fixed;
  19.         GtkWidget *item_com;
  20.         GList *items = NULL;
  21.         GtkWidget *combo;        //com1 或者 com2
  22.         GtkWidget *view;        //文本区
  23.         GtkTextBuffer *buffer;
  24.         GtkWidget *b_send;        //发送按钮
  25.        
  26.         gtk_init(&argc, &argv);
  27.         window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  28.         g_signal_connect(G_OBJECT(window),"delete_event",
  29.                 G_CALLBACK(gtk_main_quit),NULL);
  30.         gtk_window_set_title(GTK_WINDOW(window),"串口测试精灵");
  31.         gtk_window_set_default_size(GTK_WINDOW(window),500,300);
  32.         gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);

  33.         fixed = gtk_fixed_new();
  34.         gtk_fixed_set_has_window(GTK_FIXED(fixed),TRUE);
  35.         gtk_container_add(GTK_CONTAINER(window),fixed);
  36.         gtk_widget_show(fixed);
  37.        
  38.         item_com = gtk_list_item_new();
  39.         items = g_list_append(items, "COM1");
  40.         items = g_list_append(items, "COM2");
  41.         combo = gtk_combo_new();
  42.         gtk_combo_set_popdown_strings(GTK_COMBO(combo),items);
  43.         gtk_fixed_put(GTK_FIXED(fixed),combo,8,8);
  44.         gtk_widget_show(combo);
  45.        
  46.         view = gtk_scrolled_window_new(NULL,NULL);
  47.         gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(view),
  48.                 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
  49.         text = gtk_text_view_new();        //添加发送文本框
  50. //        gtk_text_view_set_left_margin(GTK_TEXT_VIEW(view),3);
  51.         buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text));
  52.         gtk_text_buffer_set_text(buffer,"Hello, this is some text", 1);
  53.         view = gtk_viewport_new(NULL,NULL);
  54.         gtk_fixed_put(GTK_FIXED(fixed), view, 300, 8);
  55.         gtk_widget_show(view);

  56. //        b_send =

  57.         gtk_widget_show(window);
  58.         gtk_main();
  59.         return FALSE;
  60. }

复制代码


上面的代码,我文本框的部分不知道怎么弄。没有弄出来。请帮我看看。提示一下。谢谢。
就是这部分:
        view = gtk_scrolled_window_new(NULL,NULL);
        gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(view),
                GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
        text = gtk_text_view_new();        //添加发送文本框
//        gtk_text_view_set_left_margin(GTK_TEXT_VIEW(view),3);
        buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text));
        gtk_text_buffer_set_text(buffer,"Hello, this is some text", 1);
        view = gtk_viewport_new(NULL,NULL);
 楼主| 发表于 2004-6-28 21:57:41 | 显示全部楼层
filename : interface.c 不让修改。glade 写的。
/*
* DO NOT EDIT THIS FILE - it is generated by Glade.
*/

而如下:

  1. GtkWidget*
  2. create_window1 (void)
  3. {
  4.   GtkWidget *window1;
  5.   GtkWidget *fixed1;
  6.   GtkWidget *textview1;
  7.   GtkWidget *textview2;
  8.   GtkWidget *button1;
  9.   GtkWidget *button4;
  10.   GtkWidget *button2;
  11.   GtkWidget *button3;
  12.   GtkWidget *label1;
  13.   GtkWidget *button6;
  14.   GtkWidget *button7;
  15.   GtkWidget *button8;
  16.   GtkWidget *button5;
  17.   GtkWidget *comboboxentry1;
复制代码

textview2 是在这个函数下定义的,不是全局的。
所以不能在
callback.c 这个文件里的

  1. void
  2. on_button1_clicked                     (GtkButton       *button,
  3.                                         gpointer         user_data)
  4. {
  5. //清空发送文本框
  6.         gchar *str = "\0";
  7.         gtk_text_view_set_buffer(textview2, str);
  8. }
复制代码

引用吧。那有什么办法呢?
请帮帮忙谢谢。
发表于 2004-6-28 22:14:30 | 显示全部楼层
应该有某种引用textview2的方法的吧
 楼主| 发表于 2004-6-28 22:30:12 | 显示全部楼层

  1. /*
  2. * DO NOT EDIT THIS FILE - it is generated by Glade.
  3. */

  4. #ifdef HAVE_CONFIG_H
  5. #  include <config.h>
  6. #endif

  7. #include <sys/types.h>
  8. #include <sys/stat.h>
  9. #include <unistd.h>
  10. #include <string.h>
  11. #include <stdio.h>

  12. #include <gdk/gdkkeysyms.h>
  13. #include <gtk/gtk.h>

  14. #include "callbacks.h"
  15. #include "interface.h"
  16. #include "support.h"

  17. #define GLADE_HOOKUP_OBJECT(component,widget,name) \
  18.   g_object_set_data_full (G_OBJECT (component), name, \
  19.     gtk_widget_ref (widget), (GDestroyNotify) gtk_widget_unref)

  20. #define GLADE_HOOKUP_OBJECT_NO_REF(component,widget,name) \
  21.   g_object_set_data (G_OBJECT (component), name, widget)

  22. GtkWidget*
  23. create_window1 (void)
  24. {
  25.   GtkWidget *window1;
  26.   GtkWidget *fixed1;
  27.   GtkWidget *textview1;
  28.   GtkWidget *textview2;
  29.   GtkWidget *button1;
  30.   GtkWidget *button4;
  31.   GtkWidget *button2;
  32.   GtkWidget *button3;
  33.   GtkWidget *label1;
  34.   GtkWidget *button6;
  35.   GtkWidget *button7;
  36.   GtkWidget *button8;
  37.   GtkWidget *button5;
  38.   GtkWidget *comboboxentry1;

  39.   window1 = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  40.   gtk_window_set_title (GTK_WINDOW (window1), _("serial"));

  41.   fixed1 = gtk_fixed_new ();
  42.   gtk_widget_show (fixed1);
  43.   gtk_container_add (GTK_CONTAINER (window1), fixed1);

  44.   textview1 = gtk_text_view_new ();
  45.   gtk_widget_show (textview1);
  46.   gtk_fixed_put (GTK_FIXED (fixed1), textview1, 288, 16);
  47.   gtk_widget_set_size_request (textview1, 352, 176);
  48.   gtk_container_set_border_width (GTK_CONTAINER (textview1), 2);

  49.   textview2 = gtk_text_view_new ();
  50.   gtk_widget_show (textview2);
  51.   gtk_fixed_put (GTK_FIXED (fixed1), textview2, 288, 240);
  52.   gtk_widget_set_size_request (textview2, 352, 120);
  53.   gtk_container_set_border_width (GTK_CONTAINER (textview2), 2);
  54.   gtk_text_buffer_set_text (gtk_text_view_get_buffer (GTK_TEXT_VIEW (textview2)),
  55.         _(" [url]http://211.92.88.40/~wide288[/url]"), -1);

  56.   button1 = gtk_button_new_with_mnemonic (_("\346\270\205\347\251\272button1"));
  57.   gtk_widget_show (button1);
  58.   gtk_fixed_put (GTK_FIXED (fixed1), button1, 384, 368);
  59.   gtk_widget_set_size_request (button1, 90, 28);

  60.   button4 = gtk_button_new_with_mnemonic (_("\346\270\205\347\251\272button4"));
  61.   gtk_widget_show (button4);
  62.   gtk_fixed_put (GTK_FIXED (fixed1), button4, 400, 200);
  63.   gtk_widget_set_size_request (button4, 90, 32);

  64.   button2 = gtk_button_new_with_mnemonic (_("\345\217\221\351\200\201button2"));
  65.   gtk_widget_show (button2);
  66.   gtk_fixed_put (GTK_FIXED (fixed1), button2, 488, 368);
  67.   gtk_widget_set_size_request (button2, 88, 32);

  68.   button3 = gtk_button_new_with_mnemonic (_("button3"));
  69.   gtk_widget_show (button3);
  70.   gtk_fixed_put (GTK_FIXED (fixed1), button3, 584, 368);
  71.   gtk_widget_set_size_request (button3, 58, 28);

  72.   label1 = gtk_label_new (_("\351\200\211\346\213\251 COM \347\253\257\345\217\243"));
  73.   gtk_widget_show (label1);
  74.   gtk_fixed_put (GTK_FIXED (fixed1), label1, 40, 24);
  75.   gtk_widget_set_size_request (label1, 112, 32);

  76.   button6 = gtk_button_new_with_mnemonic (_("\346\211\223\345\274\200\344\270\262\345\217\243button6"));
  77.   gtk_widget_show (button6);
  78.   gtk_fixed_put (GTK_FIXED (fixed1), button6, 8, 320);
  79.   gtk_widget_set_size_request (button6, 128, 32);

  80.   button7 = gtk_button_new_with_mnemonic (_("\345\205\263\351\227\255button7"));
  81.   gtk_widget_show (button7);
  82.   gtk_fixed_put (GTK_FIXED (fixed1), button7, 144, 320);
  83.   gtk_widget_set_size_request (button7, 88, 32);

  84.   button8 = gtk_button_new_with_mnemonic (_("\351\200\200\345\207\272button8"));
  85.   gtk_widget_show (button8);
  86.   gtk_fixed_put (GTK_FIXED (fixed1), button8, 80, 360);
  87.   gtk_widget_set_size_request (button8, 104, 32);

  88.   button5 = gtk_button_new_with_mnemonic (_("\350\277\233\345\210\266\350\275\254\346\215\242button5"));
  89.   gtk_widget_show (button5);
  90.   gtk_fixed_put (GTK_FIXED (fixed1), button5, 520, 200);
  91.   gtk_widget_set_size_request (button5, 112, 32);

  92.   comboboxentry1 = gtk_combo_box_entry_new_text ();
  93.   gtk_widget_show (comboboxentry1);
  94.   gtk_fixed_put (GTK_FIXED (fixed1), comboboxentry1, 40, 56);
  95.   gtk_widget_set_size_request (comboboxentry1, 183, 25);
  96.   gtk_combo_box_append_text (GTK_COMBO_BOX (comboboxentry1), _("COM1"));
  97.   gtk_combo_box_append_text (GTK_COMBO_BOX (comboboxentry1), _("COM2"));

  98.   g_signal_connect ((gpointer) window1, "destroy_event",
  99.                     G_CALLBACK (on_window1_destroy_event),
  100.                     NULL);
  101.   g_signal_connect ((gpointer) button1, "clicked",
  102.                     G_CALLBACK (on_button1_clicked),
  103.                     NULL);
  104.   g_signal_connect ((gpointer) button4, "clicked",
  105.                     G_CALLBACK (on_button4_clicked),
  106.                     NULL);
  107.   g_signal_connect ((gpointer) button2, "clicked",
  108.                     G_CALLBACK (on_button2_clicked),
  109.                     NULL);
  110.   g_signal_connect ((gpointer) button3, "clicked",
  111.                     G_CALLBACK (on_button3_clicked),
  112.                     NULL);
  113.   g_signal_connect ((gpointer) button6, "clicked",
  114.                     G_CALLBACK (on_button6_clicked),
  115.                     NULL);
  116.   g_signal_connect ((gpointer) button7, "clicked",
  117.                     G_CALLBACK (on_button7_clicked),
  118.                     NULL);
  119.   g_signal_connect ((gpointer) button8, "clicked",
  120.                     G_CALLBACK (on_button8_clicked),
  121.                     NULL);
  122.   g_signal_connect ((gpointer) button5, "clicked",
  123.                     G_CALLBACK (on_button5_clicked),
  124.                     NULL);
  125.   g_signal_connect ((gpointer) comboboxentry1, "changed",
  126.                     G_CALLBACK (on_comboboxentry1_changed),
  127.                     NULL);

  128.   /* Store pointers to all widgets, for use by lookup_widget(). */
  129.   GLADE_HOOKUP_OBJECT_NO_REF (window1, window1, "window1");
  130.   GLADE_HOOKUP_OBJECT (window1, fixed1, "fixed1");
  131.   GLADE_HOOKUP_OBJECT (window1, textview1, "textview1");
  132.   GLADE_HOOKUP_OBJECT (window1, textview2, "textview2");
  133.   GLADE_HOOKUP_OBJECT (window1, button1, "button1");
  134.   GLADE_HOOKUP_OBJECT (window1, button4, "button4");
  135.   GLADE_HOOKUP_OBJECT (window1, button2, "button2");
  136.   GLADE_HOOKUP_OBJECT (window1, button3, "button3");
  137.   GLADE_HOOKUP_OBJECT (window1, label1, "label1");
  138.   GLADE_HOOKUP_OBJECT (window1, button6, "button6");
  139.   GLADE_HOOKUP_OBJECT (window1, button7, "button7");
  140.   GLADE_HOOKUP_OBJECT (window1, button8, "button8");
  141.   GLADE_HOOKUP_OBJECT (window1, button5, "button5");
  142.   GLADE_HOOKUP_OBJECT (window1, comboboxentry1, "comboboxentry1");

  143.   return window1;
  144. }

复制代码
 楼主| 发表于 2004-6-28 22:45:47 | 显示全部楼层
main.c

  1. /*
  2. * Initial main.c file generated by Glade. Edit as required.
  3. * Glade will not overwrite this file.
  4. */

  5. #ifdef HAVE_CONFIG_H
  6. #  include <config.h>
  7. #endif

  8. #include <gtk/gtk.h>

  9. #include "interface.h"
  10. #include "support.h"

  11. static gchar *com = "/dev/ttyS0";

  12. int
  13. main (int argc, char *argv[])
  14. {
  15.   GtkWidget *window1;

  16. #ifdef ENABLE_NLS
  17.   bindtextdomain (GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR);
  18.   bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
  19.   textdomain (GETTEXT_PACKAGE);
  20. #endif

  21.   gtk_set_locale ();
  22. //        setsid();        //甩开终端控制
  23.   gtk_init (&argc, &argv);

  24.   add_pixmap_directory (PACKAGE_DATA_DIR "/" PACKAGE "/pixmaps");

  25.   /*
  26.    * The following code was added by Glade to create one of each component
  27.    * (except popup menus), just so that you see something after building
  28.    * the project. Delete any components that you don't want shown initially.
  29.    */
  30.   window1 = create_window1 ();
  31.   gtk_widget_show (window1);

  32.   gtk_main ();
  33.   return 0;
  34. }

复制代码
 楼主| 发表于 2004-6-28 22:52:25 | 显示全部楼层
callback.c

  1. #ifdef HAVE_CONFIG_H
  2. #  include <config.h>
  3. #endif

  4. #include <gtk/gtk.h>

  5. #include "callbacks.h"
  6. #include "interface.h"
  7. #include "support.h"


  8. void
  9. on_comboboxentry1_changed              (GtkComboBox     *combobox,
  10.                                         gpointer         user_data)
  11. {
  12. //选择端口
  13.         gint n = 0;
  14.         n = gtk_combo_box_get_active(combobox);
  15.         printf("%d\n",n);       
  16. }


  17. void
  18. on_button6_clicked                     (GtkButton       *button,
  19.                                         gpointer         user_data)
  20. {
  21. //打开串口
  22. gchar *com_str = "button6(): com1";
  23. printf("%s",com_str);
  24. }


  25. void
  26. on_button7_clicked                     (GtkButton       *button,
  27.                                         gpointer         user_data)
  28. {
  29. //关闭串口

  30. }


  31. void
  32. on_button1_clicked                     (GtkButton       *button,
  33.                                         gpointer         user_data)
  34. {
  35. //清空发送文本框
  36.        
  37.        
  38.         gtk_text_view_set_buffer(tv2, str);
  39. }


  40. void
  41. on_button5_clicked                     (GtkButton       *button,
  42.                                         gpointer         user_data)
  43. {
  44. //接收文本框进制互换(十六《--》十)

  45. }


  46. void
  47. on_button4_clicked                     (GtkButton       *button,
  48.                                         gpointer         user_data)
  49. {
  50. //清空接收文本框

  51. }


  52. void
  53. on_button2_clicked                     (GtkButton       *button,
  54.                                         gpointer         user_data)
  55. {
  56. //发送文本

  57. }


  58. void
  59. on_button3_clicked                     (GtkButton       *button,
  60.                                         gpointer         user_data)
  61. {
  62. //发送文本框进制互换

  63. }


  64. void
  65. on_button8_clicked                     (GtkButton       *button,
  66.                                         gpointer         user_data)
  67. {
  68. //退出程序
  69. //此函数成功
  70.         gtk_main_quit();
  71. //        return FALSE;
  72. }


  73. gboolean
  74. on_window1_destroy_event               (GtkWidget       *widget,
  75.                                         GdkEvent        *event,
  76.                                         gpointer         user_data)
  77. {
  78. //本意也是退出程序,可是程序结束后,提示符没有返回。
  79.         gtk_main_quit();
  80.   return FALSE;
  81. }


  82. /*void
  83. on_comboboxentry1_changed              (GtkComboBox     *combobox,
  84.                                         gpointer         user_data)
  85. {

  86. }*/

复制代码
发表于 2004-6-28 23:55:06 | 显示全部楼层

  1. void
  2. on_button1_clicked (GtkButton *button, gpointer user_data)
  3. {
  4.         gchar *str = "\0";
  5.         GtkWidget *w = NULL, *tv2 = NULL;
  6.         w = gtk_widget_get_toplevel((GtkWidget*)button);
  7.         if (GTK_WIDGET_TOPLEVEL (w))
  8.         {
  9.                 tv2 = g_object_get_data (w, "textview2");
  10.                 if (tv2 != NULL)
  11.                 {
  12.                         gtk_text_buffer_set_text(gtk_text_view_get_buffer(tv2), str, strlen(str));
  13.                 }
  14.         }
  15. }
复制代码
发表于 2004-6-29 09:26:35 | 显示全部楼层
/* Store pointers to all widgets, for use by lookup_widget(). */
呵呵,interface.c里都已经指明使用方法了啊
 楼主| 发表于 2004-6-30 19:08:49 | 显示全部楼层
callbacks.c: In function `on_button1_clicked':
callbacks.c:52: warning: passing arg 1 of `g_object_get_data' from incompatible pointer type
callbacks.c:55: warning: passing arg 1 of `gtk_text_view_get_buffer' from incompatible pointer type
////(指针类型不一致)
运行后出现的问题:能不能修正啊?
src/gtk-sct

(gtk-sct:365): Gtk-CRITICAL **: file gtkcontainer.c: line 696 (gtk_container_child_get): assertion `GTK_IS_WIDGET (child)' failed
怀疑`GTK_IS_WIDGET (child)' 错误 ???

不过上面的代码的确解决了,清空文本框的问题。
 楼主| 发表于 2004-6-30 19:21:20 | 显示全部楼层
最初由 x11 发表
/* Store pointers to all widgets, for use by lookup_widget(). */
呵呵,interface.c里都已经指明使用方法了啊


所有控件都使用了 lookup_widget()来存储指针?是这么意吗?
什么意思啊?

是为了能够使用那个函数而进行存储
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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