Articles of gtk3

如何使用像`GtkAttachOptions“枚举types设置小部件属性? 我试图模拟`gtk_widget_set_vexpand`在`gtk2`上工作

我的项目是创build一个graphics应用程序来帮助每个员工在中央数据库中创build自己的客户列表,唯一的问题是gtk3和gtk2之间的兼容性。 该项目始终是基于gtk3 ,然后我意识到有员工只使用gtk2的系统。 所以我对这个实现进行了一些修改,没有什么问题。 我想完成的最后一件事就是模拟gtk_widget_get_hexpand()和gtk_widget_get_vexpand()的函数……它们只在gtk3 。 对于其他function工作方式与gtk3相同,我做了这样的事情: #define gtk_grid_new() gtk_table_new(1,1,false) #define GTK_GRID(x) GTK_TABLE(x) #define GtkGrid GtkTable #define gtk_grid_attach(x1,x2,x3,x4,x5,x6) gtk_table_attach(x1,x2,x3,x3+x5,x4,x4+x6,GTK_FILL,GTK_FILL,0,0) 要让应用程序在没有gtk_widget_get_hexpand()和gtk_widget_get_hexpand()函数的情况下工作,只需: #define gtk_widget_set_hexpand(x1,x2) #define gtk_widget_set_vexpand(x1,x2) 因为用macros来模拟这些函数稍微复杂一些,我试图做这样的事情: inline void gtk_widget_set_hexpand(GtkWidget* widget,gboolean expanded) { GValue value = G_VALUE_INIT; g_value_init(&value,G_TYPE_ENUM); if(expanded) g_value_set_enum(&value,GTK_EXPAND); else g_value_set_enum(&value,GTK_FILL); gtk_container_child_set_property(GTK_CONTAINER(gtk_widget_get_parent(widget)),widget,"x-options",&value); } inline void gtk_widget_set_vexpand(GtkWidget* widget,gboolean expanded) { GValue value = G_VALUE_INIT; g_value_init(&value,G_TYPE_ENUM); if(expanded) g_value_set_enum(&value,GTK_EXPAND); […]

Gtk + 3&C&Glade问题

我试图在Linux上用C和Glade做一个简单的Gui程序。 我写了一个简单的程序,用Gladedevise了一个窗口。 当我运行代码时说: (gtk-test:23026): Gtk-CRITICAL **: gtk_widget_show: assertion 'GTK_IS_WIDGET(widget)' failed 没有窗户打开。 我在网上search了一下,但是我什么都没有帮助。 有人说,我必须将glade文件转换为.xml,但没有奏效。 C #include <gtk/gtk.h> int main(int argc, char *argv[]) { GtkBuilder *builder; GtkWidget *window; gtk_init(&argc, &argv); builder = gtk_builder_new(); gtk_builder_add_from_file (builder, "window_main.glade", NULL); window = GTK_WIDGET(gtk_builder_get_object(builder, "window_main")); gtk_builder_connect_signals(builder, NULL); g_object_unref(builder); gtk_widget_show(window); gtk_main(); return 0; } void on_window_main_destroy() { gtk_main_quit(); } 林间空地 <?xml version=1.0 […]

使用Gala界面devise器和Vala(编程语言)

与Vala一起使用Glade [Interface Designer]的好资源似乎非常稀less,而且我很难开始使用Glade。 我确实find了一个去年看起来不错的教程,但我不能再find它。 基本上,我想使用Glade做GUI的东西,然后以某种方式“钩”到我的Vala代码。 我们如何做到这一点?

在Linux上的Gtk +版本错误

我运行一个python应用程序,它的GUI使用了glade builder文件。 我最近迁移到了KDE桌面(Debian Wheezy)。 使用apt(gir1.2-gtk-3.0)安装Gtk绑定之后,我试图在启动Python代码时出现以下错误信息: gi._glib.GError: XXX.glade: required gtk+ version 3.10, current version is 3.4 我怎么能最好的解决这个问题? 我需要将Gtk从3.4降级到3.1吗? 如果是的话我该怎么做? 我如何在版本库中find版本3.10? 或者是错误的configuration? 也许Gtk版本被固定在我从不同的系统导入的glade文件中,它的Gtk版本可能不一样(不记得)? 还是有其他build议? 我不认为源代码在这个问题上是有帮助的,因为这个问题很可能位于它之外,但是也有一些源于它: from gi.repository import Gtk, GObject, GLib wTree = Gtk.Builder() class Test_GUI: def __init__(self): self.builder = Gtk.Builder() self.builder.add_from_file("XXX.glade") self.window = self.builder.get_object("MainScreen") self.window.show_all()

python pygir-ctypes和gi.repository之间的区别

我不明白2 python gtk3软件包的差异和要求。 一个是由pypm安装的activestate pygir-ctypes软件包,另一个是标准的linux(我使用Ubuntu)python gobject-introspection 。 在https://python-gtk-3-tutorial.readthedocs.org/en/latest/install.html上的gobject-introspection的文档是相当不错的,如果你运行基于Linux的操作系统,但在Windows上的替代似乎是activestate的pygir – types的实现,但文档是有限的。 我有一个使用GTK3 python gobject-introspection的小GUI,从此开始 from gi.repository import Gtk pygir-ctypes开头 from gir import Gtk 我的假设目前是相同的,但是包装在安装方面有不同的要求。 在Windows上,网上有几条评论,只是对Python GTK3(通过gobject-introspection)的支持有限的支持,目前没有什么可用,但是这个pygir-ctypes看起来很有前景。 我想在Windows上运行我的GUI。 有人可以解释这个区别吗?

Gtk-ERROR **:检测到GTK + 2.x符号

我用gcc用下面的标志编译我的c应用程序: gcc evis.c `pkg-config –cflags –libs gtk+-2.0 –libs clutter-gtk-1.0 –libs gthread-2.0` -Wall -o evis 现在我的代码编译几个警告,但仍然完成。 当我尝试运行我的程序时,我得到: (evis:1820): Gtk-ERROR **: GTK+ 2.x symbols detected. Using GTK+ 2.x and GTK+ 3 in the same process is not supported 如何解决这个错误? 我怎么知道在哪里看? 有什么工具可以在线使用,可以在我的代码中扫描GTK3符号吗? 我正在编译GTK + 2,所以我不明白这是怎么回事。

gdbdebugging(带有断点):Gtk-WARNING **:无效的文本缓冲区迭代器

我怎样才能debugging(并达到一些断点)与gdb我的越野车程序(使用GTK3)显示: (monimelt:161): Gtk-WARNING **: Invalid text buffer iterator: either the iterator is uninitialized, or the characters/pixbufs/widgets in the buffer have been modified since the iterator was created. You must use marks, character numbers, or line numbers to preserve a position across buffer modifications. You can apply tags and insert marks without invalidating your iterators, but […]

无法初始化窗口并等待进程在Python 3 + GTK + 3中结束

我对于面向对象编程,Python和GTK + 3很陌生,尽pipe我对程序编程有一定的了解(主要是C)。 我正在尝试构build一个简单的Python + GTK + 3脚本来在Linux下运行pkexec apt-get update 。 我有一个mainWindow类(基于一个Gtk.Window类),它包含一个名为button (基于一个Gtk.Button类)的button对象,它触发一个clicked事件时在mainWindow定义的new_update_window()方法; new_update_window()方法从一个updateWindow类(基于一个Gtk.Window类)初始化一个updateWindow对象,该类包含一个名为label的标签对象(基于一个Gtk.Label类),并调用Gtk.Label show_all()和update()在updateWindow ; update()方法应该改变label ,运行pkexec apt-get update并再次更改label 。 问题是无论我做什么,发生下列之一: 如果直接运行subprocess.Popen(["/usr/bin/pkexec", "/usr/bin/apt-get", "update"]) , update.Window显示update.Window ,但label会立即设置为应该设置的值只有在pkexec apt-get update完成执行后才能设置; 如果直接运行subprocess.call(["/usr/bin/pkexec", "/usr/bin/apt-get", "update"]) ,直到pkexec apt-get update执行完成才会显示pkexec apt-get update ; 我尝试import threading ,在updateWindow定义一个单独的run_update()方法,并使用thread = threading.Thread(target=self.run_update) , thread.start() , thread.join()在单独的线程中启动函数。仍然取决于我在run_update() ( run_update() subprocess.call()或run_update()调用哪个方法,上面描述的相关行为performance出来。 文艺青年最爱的 我不知道如何去完成我之后的事情,那就是: 显示updateWindow ( […]

直观地debuggingGTK3应用程序(GtkInspector / gtkparasite)

试图debugging一个GTK主题,我修改了。 已经纠正了主题的大部分问题,我仍然不知道,什么颜色设置负责一些input字段或文本视图中的背景颜色。 build立 我可以用Gtk3应用程序启动GtkInspector以及gtkparasite (根据给定的页面描述启动那些debugging器)。 我确定,debugging器附加到正确的应用程序,因为我可以 改变程序的主题 显示graphics更新 显示像素caching… 问题 在左侧的select窗格(widget-treeview预期)中只有一个元素:“GtkSettings” 试过: 合并 突触 Wireshark的 zenity –calendar 预期行为: 能够 从缺失的 widget-treeview中select小部件,或者用'target button' 检查并更改其参数 系统信息 操作系统和所有程序/软件包:Debian 8 x86_64(最新date:09.01.2015) 题 我怎样才能debugging我的GTK主题? 有没有其他人遇到与GtkInspector问题(这是一个错误)?

如何使用自定义CSS来设置GTK +的样式?

有人可以键入一个简单的例子,用CSS来devise一个GTK +小部件吗? 我无法弄清楚如何去看文档: #include <gtk/gtk.h> int main(int argc,char *argv[]) { gtk_init(&argc,&argv); GtkWidget *window; GtkWidget *button; GtkCssProvider *cssProvider; gtk_css_provider_load_from_path(cssProvider,"./gtkExample2.css",NULL); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); button = gtk_button_new_with_label("GTK Button"); gtk_style_context_add_provider(gtk_widget_get_style_context(window),cssProvider,GTK_STYLE_PROVIDER_PRIORITY_USER); g_signal_connect_swapped(window,"delete-event",G_CALLBACK(gtk_widget_destroy),window); gtk_container_set_border_width(GTK_CONTAINER(window),20); gtk_container_add(GTK_CONTAINER(window),button); gtk_widget_show(window); gtk_widget_show(button); gtk_main(); return 1; }