Tag: gtk3

刷新容器中的子项 – GTK

我正在使用图形用户界面在c中开发某种金融计算器。 我正在使用gtk-lib,我遇到了一个无法解决的问题。 它关于如何动态更新(刷新)窗口及其子窗口 – 更具体地说 – 容器中有一个子项是文本标签。 我希望根据textinputfield中输入的内容更改此标签。 我习惯于java,其中一个可以轻松调用名为invalidate()的方法。 c中有类似的解决方案吗? 或者是删除这个chidlitem并添加一个新的解决方案? 提前致谢 #include static GtkWidget *txt; static GtkWidget *window; static GtkWidget *vbox, *assetPrice, *strikePrice; static GtkWidget *asset_label; static GtkWidget *frame; static void entry_Submit(GtkWidget *widget, GtkWidget *entry) { const gchar *text = gtk_entry_get_text(GTK_ENTRY (txt)); printf (“Result: %s\n”, text); } static void CreateTextBox(GtkWidget **entry, GtkWidget *vbox) { […]

设置对话框不可resize或创建另一个gtk窗口

我有一个包含4个按钮的gtk_window。 其中一个按钮将打开一个文件选择对话框(另一个function) – 当选择文件时 – 将显示一个带有3 gtk_entry(此function)的对话框。 static void function_with_3_gtk_entry (gchar *message, gpointer mainwin){ GtkWidget *dialog, *label, *content_area, *entry1, *entry2, *entry3; /* Create the widgets */ dialog = gtk_dialog_new_with_buttons (“Nome File”, mainwin, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_OK, GTK_RESPONSE_NONE, NULL); content_area = gtk_dialog_get_content_area (GTK_DIALOG (dialog)); entry1 = gtk_entry_new(); entry2 = gtk_entry_new(); entry3 = gtk_entry_new(); gtk_widget_set_size_request(dialog, 250, 200); /* Ensure […]

执行gtk3的新高度宽度几何管理方法

继续我以前的问题 拖放固定容器会改变其大小 我按照ergosys提供的建议阅读了他提供的链接中的信息。 如果我理解正确,那就是新的宣告方式 /* LEFT FRAME */ frame1= gtk_frame_new(NULL); gtk_table_attach(GTK_TABLE(table), frame1, 0,14,0,49,GTK_SHRINK,GTK_SHRINK,0,0); gtk_widget_set_size_request(frame1, 360,570); 是(暂时忽略高度) static void my_widget_get_preferred_width (GtkWidget *widget, gint *minimal_width, gint *natural_width) { GtkRequisition requisition; gtk_widget_get_requisition (widget, &requisition); *minimal_width = *natural_width = requisition.width; } …. /* LEFT FRAME */ frame1= gtk_frame_new(NULL); gtk_table_attach(GTK_TABLE(table), frame1, 0,14,0,49,GTK_SHRINK,GTK_SHRINK,0,0); gint min_width=360; gint nat_width=360; GTK_WIDGET_GET_CLASS(frame1)->get_preferred_width=my_widget_get_preferred_width; my_widget_get_preferred_width(frame1,&min_width,&nat_width); 它编译好,但是,运行时,它给了我这个错误: (conky_companion:19700): […]

更改窗口的不透明度/隐藏它而不影响其子项

我只是有一个绘图区域,包含在GtkWindow顶层。 如何隐藏窗口/使其完全透明而不对其子项进行操作(在这种情况下是绘图区域)? 我的目标是这个程序绘制的所有内容都只是canvas图。

如何使用css代码单独设置gtk小部件的样式

在此GTK +更改字体旋转按钮后 , 如何将CSS应用于GTK +代码? 问题,我开始了解如何将CSS样式应用于GTK代码,但仍然有很多令人困惑的细节。 这是我创建两个按钮和三个标签的代码: test.c的 #include #include static void activate (GtkApplication *app, gpointer user_data) { GtkWidget *window = gtk_application_window_new (app);; GtkWidget *button_01 = gtk_button_new_with_label(“This is button 01”); GtkWidget *button_02 = gtk_button_new_with_label(“This is button 02”); GtkWidget *label0 = gtk_label_new(“hello 0”); GtkWidget *label1 = gtk_label_new(“hello 1”); GtkWidget *label2 = gtk_label_new(“hello 2”); GtkWidget * main_box […]

拖放固定容器会改变其大小

我在C中开发了一个gtk2应用程序(Conky Companion)来帮助我的conky脚本用户 链接: http : //crunchbanglinux.org/forums/topic/19235/conky-weather-scripts-using-accuweatherwundergroundnwsweathercom/ 相对轻松地创建自己的conkyrcs。 主屏幕的屏幕截图如下: http://sofzh.miximages.com/c/jWl88.jpg 用户可以从右侧向左侧拖放图标或标签,移动它们,调整它们大小,改变它们的大小或颜色等。当开心时,他可以按下生成按钮并生成一个conkyrc文件。 屏幕是一个带有桌子的顶部不可resize的窗口。 桌子的两侧是放置固定容器的框架。 每当有人试图在左框架/固定容器的右边框或下边框放置图标或标签时,窗口小部件就会脱离边界,正如您在上面的屏幕截图中看到的那样。 我现在正试图将应用程序移植到Gtk3,我面临着一个奇怪的问题。 每当用户尝试将对象放置或移动到左框架/固定容器的右边框或底部边框时,它会调整自身大小以适应新放置的窗口小部件。 http://sofzh.miximages.com/c/d1lc4.jpg 如果我将对象向左移动(或向上移动),则帧将返回到由gtk_widget_set_size_request定义的大小。 有没有办法让固定容器……固定? 我不希望它resize。 将框架和固定容器放在窗口中的代码如下: /* LEFT FRAME */ frame1= gtk_frame_new(NULL); gtk_table_attach(GTK_TABLE(table), frame1, 0,14,0,49,GTK_SHRINK,GTK_SHRINK,0,0); gtk_widget_set_size_request(frame1, 360,570); gtk_widget_show(frame1); /* LEFT FRAME – FIXED CONTAINER */ fixed1 = gtk_fixed_new(); gtk_widget_set_has_window(fixed1,TRUE); gtk_container_add(GTK_CONTAINER(frame1),fixed1); gtk_widget_modify_bg (fixed1, GTK_STATE_NORMAL, &color); gtk_drag_dest_set ( fixed1, GTK_DEST_DEFAULT_ALL, target_list, 1, GDK_ACTION_COPY|GDK_ACTION_MOVE); […]

你如何在GTK 3.8中强制刷新屏幕?

找到了解决方案。 见下文。 我在滚动窗口中使用GTK 3.8 gtk_grid 。 C代码通过大量数据工作并在网格中显示一些数据。 在程序完成处理所有数据之前,GTK不会绘制网格。 添加数据时,如何强制GTK 3刷新屏幕? 我试过gtk_widget_queue_draw但没有任何反应。 我也测试了gtk_widget_show_now但没有发生任何事情。 该过程可能会持续几秒钟或几分钟。 用户可以选择要显示的数据范围和刷新。 刷新可能是每5秒或每10行。 如果要么工作,我会很高兴。 我能找到的唯一相关问题是在GTK 2上,并推荐不起作用的gtk_widget_queue_draw。 我阅读了所有GTK文档,并推荐了相同的function。 文档,示例和答案中缺少某些内容。 从我所看到的,我将不得不处理100行然后停止并显示一个按钮来请求下一个100.这是不可行的。 用户需要将数据滚动到最后。 GTK_grid在版本3中似乎已经改变了几次。如果有更有效或更有效的方式来显示行和列,我没有被锁定到GTK_grid。 没有选择恢复到早期的GTK。 我找到了适用于GTK 3.8的东西。 在gtk_widget_queue_draw之后添加一行: gtk_widget_queue_draw(results); while (g_main_context_pending(NULL)) { g_main_context_iteration(NULL,FALSE); } 阅读主事件循环以获取更多详细信息。

如何修复Code :: Blocks向导以查找GTK + 3.0而不是2.0?

我一直在使用Code :: Blocks,因为我开始用C编程,在尝试了Windows下存在的每个C编译器后,我发现Code :: Blocks是最容易使用的,因为我不需要花费整整一年的时间来学习如何在我开始编写“hello world”应用程序之前使用该程序XD …… 无论如何我安装了GTK + 3.0并设置环境变量并运行cmd提示命令,因为安装教程告诉我….我甚至从cmd提示符运行了gtk-demo文件….当我去运行时Code :: Blocks 13.10 gtk +向导它一直告诉我GTK +好像已经安装了但是在做了一些挖掘后它找不到gtk.h我意识到它正在寻找gtk-2.0文件夹而不是gtk-3.0文件夹。 .. 另一个论坛上的某个人似乎已经通过向导脚本中将2.0更改为3.0,但声称一旦他尝试编译它就会给他带来更多错误。

如何在GTK3中的GtkDrawingArea上更改鼠标光标?

这是从我之前的问题得出的,我试图将鼠标光标设置为在hover在GtkDrawingArea上时交叉发。 我试图将ebassi的答案应用于zetcode的以下代码 。 到目前为止我有: #include #include static void do_drawing(cairo_t *); struct { int count; double coordx[100]; double coordy[100]; } glob; static gboolean on_draw_event(GtkWidget *widget, cairo_t *cr, gpointer user_data) { do_drawing(cr); return FALSE; } static void do_drawing(cairo_t *cr) { cairo_set_source_rgb(cr, 0, 0, 0); cairo_set_line_width(cr, 0.5); int i, j; for (i = 0; i <= glob.count – […]

如何将鼠标光标设置为在GtkDrawingArea上交叉发?

在GTK3中,当我将鼠标光标hover在GtkWidget上时如何设置鼠标光标,在这种情况下是GtkDrawingArea ?