GTKSharp中的CSS样式设计
我使用VS2017中的GTKSHARP将C/GTK+ GUI应用程序转换为C#.我已经安装了此软件包这是我加载CSS的方式(应用程序使用GLADE文件来定义接口): static void Main(string[] args) { new Program(args); } public Program(string[] args) { Application.Init(); builder = new Builder(); Gtk.CssProvider provider = new CssProvider(); builder.AddFromFile("interface.glade"); provider.LoadFromPath("style.css"); builder.Autoconnect(this);
32 2024-04-21
编程技术问答社区
通过唯一的ID查找glade gtk3 widget
在GLADE中,我可以为每个小部件提供一个独特的ID,但是在C代码中,我不知道如何使用这些ID. 方法" gtk_widget_get_name"似乎返回其他东西.至少目前,我只从中获得打字机,例如" GTKGRID"," GTKCOMBOBOXTEXT"," GTKSTATUSBAR" ...如果我没有在C代码中设置其他名称,则可能是默认值. 那么我如何读取我输入GLADE的GTKWIDGET的ID? 解决方案 GLADE ID与 gtk_builder_get_object() 从GLADE文件中检索其ID的对象或小部件. name 检索,实现不同的功能:从CSS文件中介绍您的小部件.它仅适用于小部件,而不是对象,而且没有任何迫使它是唯一的.
22 2024-04-10
编程技术问答社区
刷新容器中的子项目-TTK
我正在用图形用户接口在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, G
18 2024-04-10
编程技术问答社区
用gtk列出文件的小工具
我正在创建一个应用程序,该应用程序将列出一堆文件.我想列出诸如Fileroller之类的文件,但我不知道如何.我想我需要创建一个2xn(名称,大小)网格,但是我不知道如何使条目显得轻 - > Dark->每行轻>浅色,以及如何在其上方创建"胖"栏.谁能告诉我我需要组合哪种小部件才能创建类似的东西? 解决方案 您可能想要一个 gtktreeview 给你所需的一切.如果您从未使用过,则应首先阅读 tree and clee a>即使之后也准备好进行一些谷歌搜索 - 它是工具包中最复杂的小部件. TreeView可以具有标头,并且通常使用gtk_tree_view_set_rules_hint (treeview, TRUE)来实现交替的灯/暗行 - 但请阅读文档,"规则提示"是一种语义上的东西,而不是专门的视觉设置. .
12 2024-04-10
编程技术问答社区
在GTK+中做完一个动作后刷新窗口
我发现GTK,我有倍数问题...这是其中之一. 我有一个"数据"结构和一个窗口,其中包含菜单栏和图形. 该区域具有绘图函数" drawrefresh_callback",该功能用于绘制数据中描述的内容. 目前,我可以在创建DrawingArea时连接点击信号来绘制: g_signal_connect(G_OBJECT(DrawingArea), "button-press-event", G_CALLBACK(Draw_callback), pData); 确实,这样做,我可以访问draw_callback中的数据和绘图架. 当我使用菜单时,我能够调用一个称为data_addline的函数,该函数修改数据.当我连接"激活"信号以执行此操作时,我给了一个指针指向数据. (我什至不确定这是这样做的好方法). g_signal_connect(G_OBJECT(pMenuItem), "activate", G_CALLBACK(Data_addLine),
12 2024-04-10
编程技术问答社区
用GTK查询光标位置
有没有办法使用GTK C库查询光标位置?我正在编写一个程序,我需要实时读取光标的位置(通过回调函数或通过轮询以寻找更改的值).我已经通过GTK文档进行了扫描,但是找不到任何显而易见的揭示光标位置的东西. 我目前正在使用GTK C库编写此程序,因为a)我已经在C中写了一些代码,可以与低级Raspberry Pi外围物进行交互,而如果可以的话,我宁愿不要将其重写为其他语言躲开它.低级代码基于MMAP(),我相信它仍然可以与C ++一起使用,因此,如果推动推动,我认为我可以将其与其他GUI库中的C ++重写,例如WXWIDGETS或QT. (是否有简单的方法可以使用这些库来阅读光标位置?) 解决方案 您可以看一下它在那些吸引面板上的眼睛的玩具小部件中完成的,例如gboolean where (void) { gint x, y; GdkWindow *window; GdkDevice *mouse_device; #if GTK_CHECK_VERSION (3,20,0) G
4 2024-04-10
编程技术问答社区
无法在Windows 10上编译开罗C语言代码
我正在尝试编译ZetCode lines lines 在Windows 10上使用 msys64 . 我使用以下汇编命令: gcc example.c -o example `pkg-config --cflags --libs cairo gtk+-3.0` 并获取以下错误: -bash: pkg-config: command not found example.c:1:19: fatal error: cairo.h: No such file or directory #include 但是我做过 pacman -s mingw-w64-i686-cairo 之前,安装成功.当我键入** pacman -ss mingw-w64-i686-cairo **我得到以下内容: mingw32/mingw-w64-i686-cairo 1.15.2-4 [installed] Cairo vector graphics li
10 2024-04-10
编程技术问答社区
GTK+3.0多线程应用程序
这是我的问题: 我正在开发一个由: 组成的多线程应用程序 GUI线程 - > GTK 辅助线程 - >检查与杰克服务器的连接 杰克的rt线 - >做一些声音解释的东西 我已经实现了一个按钮窗口小部件,该窗口小部件仅接收助手和RT线程的信号,该信号在其回调函数中修改GUI. 那么,我的问题是:谁在修改GUI?我使用gtk_main()的辅助/RT线程或GUI线程? 感谢您的协作! 编辑:我添加了代码 /** @file jplowpassfilter.c * * @brief这是一个实现数字低频通滤波器的简单客户端 */ #include "JPLowPassFilter.h" jack_port_t *input_port; jack_port_t *output_port; jack_default_audio_sample_t tmp; int first=1; appData* mainData; jack_default_audio_sa
24 2024-04-10
编程技术问答社区
设置对话框不可调整大小或创建另一个gtk窗口
我有一个包含4个按钮的gtk_window. 这些按钮之一将打开一个文件选择对话框(另一个函数),当文件被选择时 - 将显示一个使用3 GTK_ENTRY(此函数)的对话框. 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 (GT
16 2024-04-09
编程技术问答社区
GTK 在按下按钮时从多个小工具中检索数值
我正在尝试从按钮按下窗口中的窗口中从入口字段和组合盒中检索一个值.我目前正在努力这样做.有人告诉我,要获得多个价值,我需要使用结构.但是,我正在努力使它工作.这是我到目前为止所拥有的: 函数要在按钮上运行: struct data { GtkWidget *hash; GtkWidget *hashType; }; static void queue_hash (struct data *dataStruct) { GtkWidget *hashWid = dataStruct->hash; GtkWidget *hashTypeWid = dataStruct->hashType; const char* hash = gtk_entry_get_text(GTK_ENTRY(hashWid)); char* hashType = gtk_combo_box_text_get_active_text(GTK_COMBO_
14 2024-04-09
编程技术问答社区
实施重叠的快捷方式
我正在尝试实现 ctrl+c 捷径,而不会打扰其他定义的快捷方式. 问题 我的窗户看起来像这样: GtkWindow GtkEntry GtkToggleButton 代码的一部分 // --- add checkbox --- GtkWidget * checkbutton = gtk_check_button_new_with_label("My Checkbox"); gtk_container_add(GTK_CONTAINER(vbox), GTK_WIDGET(checkbutton)); // --- setup checkbox shortcut --- GtkAccelGroup * accel_group = gtk_accel_group_new(); gtk_window_add_accel_group(GTK_WINDOW(window), accel_group); gtk_widget_add_accelerat
6 2024-04-09
编程技术问答社区
如何防止GtkWindow增长?
这是我的代码: #include int main(int argc,char**argv) { GtkWidget* window, *button, *grid; gtk_init(&argc,&argv); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_default_size(GTK_WINDOW(window),100,100); g_signal_connect(G_OBJECT(window),"destroy",G_CALLBACK(gtk_main_quit),NULL); //gtk_container_set_border_width(GTK_CONTAINER(window),10); gtk_window_set_resizable(GTK_WINDOW(window), FALSE); grid = gtk
24 2024-04-09
编程技术问答社区
GTK 3线程管理
我知道,在我们需要使用gdk_threads_enter和gdk_threads_leave之前,但是现在此功能已弃用,我对线程感到困惑. 我应该只用g_idle_add添加线程吗? 解决方案 对于与UI不相关的工人,使用GThread api,对于与UI相关的任何与UI相关的您 都可以使用g_idle_add/g_timeout_add或附加自定义到所需的事件循环. 在某些情况下,您想结合这些 - 在工人完成后立即在A GThread中进行一些工作,并从那里通知UI - 通过g_idle_add. . 如果您要开发一个库,也可以通过GAsyncInitableIface以非常干净且可取消的方式实现它(尽管在开始实际实施它之前需要更多的读数). 回应 @ptomato的评论: 您应该使用gdk_threads_add_idle()和gdk_threads_add_timeout() 而不是g_idle_add()和g_timeout_add(),因为库不在
14 2024-04-09
编程技术问答社区
C GTK通过ESC关闭后不能再次打开对话框
我有一个带有btn_cancel_open按钮的对话框. 此对话框在对话框的buton-event和close事件上映射到: void on_btn_cancel_clicked (GtkWidget *widget, signal_map_data *smd) { #ifdef debug g_print ("-> on_btn_cancel_clicked\n"); #endif gtk_widget_hide (gtk_widget_get_toplevel (widget) ); gtk_widget_set_sensitive (smd->widg.wmw.wnd, 1); } void on_dlg_close (GtkWidget *widget, signal_map_data *smd) { #ifdef debug g_print ("-> on_dlg_close\n"); #endif gtk_widget_hi
28 2024-04-09
编程技术问答社区
应用程序在第一次启动GTK3 g_io_add_watch()的命名管道后获得100%的CPU。
我正在制作以下应用程序,以观看命名pipe 命名为" info",并使用此名称的管道提供的字符串更新标签文本. #include GtkWidget* label; static void activate (GtkApplication *app, gpointer user_data) { GtkWidget *window; window = gtk_application_window_new (app); gtk_window_set_title (GTK_WINDOW (window), "Window"); gtk_window_set_default_size (GTK_WINDOW (window), 100, 20); // create label label = gtk_label_new ("aho"); gtk_container_add (GTK_CONTAI
20 2024-04-09
编程技术问答社区
如何使用gtk3在gtk_dialog窗口中打包widgets
在 gtk2 使用以下代码段来将小部件打包到 gtk_dialog 窗口中,使用 vbox 和 action_area gtkdialog 结构: window=gtk_dialog_new(); gtk_container_set_border_width((GtkContainer *)window, 0); scrolled_window=gtk_scrolled_window_new(NULL,NULL); gtk_container_set_border_width((GtkContainer *)scrolled_window, 10); gtk_scrolled_window_set_shadow_type((GtkScrolledWindow *)scrolled_window, GTK_SHADOW_IN); gtk_scrolled_window_set_policy((GtkScrolledWindow *)scrolled_wind
14 2024-04-09
编程技术问答社区
OpenCV-从C/C++中的默认网络摄像头获取图片-GTK问题
我有一个简单的GTK+ V3 GUI应用程序,并且正在使用OpenCV库,因此我有一个简单的功能,可以从连接到我的计算机的一个网络摄像头中拍摄照片.该代码包含在本文的底部. 我能够成功地获取图像数据并在屏幕上渲染,但是当我在GTK+ V3项目中包含此代码时,我会收到这样的启动错误: (result:2944): Gtk-ERROR **: GTK+ 2.x symbols detected. Using GTK+ 2.x and GTK+3 in the same process is not supported. Trace/breakpoint trap. 所以,到目前为止,这是有道理的. OpenCV库之一显然是利用GTK+ V2.事实证明,如果我从库列表中删除libopencv_highgui以链接到相对,我将不会有这个问题.但是,由于某种原因,该库中包含用于从网络摄像头获取图像数据的功能. 是否还有其他功能通过C或C++ apis for OpenCV访问
10 2024-04-09
编程技术问答社区
信号::expose-event对于GdkWindow和GdkX11Window来说是无效的。
我有以下代码从线上的一个教程中摘下.当我使用GTK+-2.0时,以下代码正常工作. 但是,当我尝试使用GTK+-3.0编译时,该代码给出了此错误: 信号" expose-event'例如类型为" gtkwindow" 的类型无效 所以我尝试做以下操作,但仍然没有帮助.它给出了另一个错误: 信号" expose-event'例如类型为'gdkx11window' 的类型无效 gtk_widget_realize(window); GdkWindow *gdkwin = gtk_widget_get_window(Gwindow); int main(int argc, char *argv[]) { GtkWidget *window; gtk_init(&argc, &argv); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); g_signal_connect(window, "expose
16 2024-04-09
编程技术问答社区
用GTK+和Cairo画线而不删除已经画好的东西
目前,我在Linux系统(准确地说是Raspberry Pi)上编写了一个程序,该程序应使用开罗绘制到GTK窗口.我一直在关注该教程: http://zetcode.com/gfx/cairo/.但这是在某些方面模糊的解释. 它没有解释我真正需要的两个点: 我无法找到一种使用正确功能调用到窗口的方法. 它删除了已经绘制的内容. 我需要以非常面向对象的方式进行一些简单的代码: 用函数调用将行绘制到GTK窗口,给定x和y,用于起点和终点; 请勿删除以前绘制的内容; 变量和窗口的所有初始化都应在主要功能之外. 基本上与此类似: #include #include void drawLine(int xStart, int yStart, int yEnd, int xEnd) { //Drawing code here. } void initializeCairo() { //Ins
28 2024-04-09
编程技术问答社区
迭代器不属于他们分配的文本缓冲区
这是一个裸骨save_as()功能: gint save_as(GtkWidget *parent, struct buffers B) { GtkWidget *file_chooser = gtk_file_chooser_dialog_new("Save As", GTK_WINDOW(parent), GTK_FILE_CHOOSER_ACTION_SAVE, "Cancel", GTK_RESPONSE_CANCEL, "Save", GTK_RESPONSE_OK, NULL); gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(file_chooser), "Untitled"); gint response = gtk_dialog_run(GTK_DIALOG(file_chooser)); switch(response) { case GTK_RESP
20 2024-04-09
编程技术问答社区