某些应用程序可以实时响应 GTK+ 主题更改。例如,Thunar、Geany、lxrandr、Hexchat 都会在主题更改时更新它们的 UI,例如在 lxappearance 中。这些都是 GTK+ 2 程序。
另一方面,到目前为止,我尝试过的所有 GTK+ 3 程序(包括 baobab、moserial gucharmap、ghex、pamac、evince、xreader)似乎无法重新加载主题,需要重新启动应用程序。
lxappearance(gtk2在我的系统上编译)正在发送一个 GTK+“信号”(不是 100% 在 GTK-land 中的术语)以导致应用程序重新加载:
// src/lxappearance.c line 198
static void reload_all_programs()
{
#if GTK_CHECK_VERSION(3, 0, 0)
/* TODO Port this to something else than gdk_event_send_clientmessage_toall */
#else
GdkEventClient event;
event.type = GDK_CLIENT_EVENT;
event.send_event = TRUE;
event.window = NULL;
if( app.use_lxsession )
{
event.message_type = gdk_atom_intern_static_string("_LXSESSION");
event.data.b[0] = 0; /* LXS_RELOAD */
}
else
{
/* if( icon_only )
event.message_type = …Run Code Online (Sandbox Code Playgroud) 以下PyGTK代码在窗口中显示PNG文件.
是否有更简单或更好的方式显示PNG文件,例如,使用gtk.DrawingArea?例如,如何调整文件大小?
import gtk
import pygtk
pygtk.require('2.0')
class Gui:
def __init__(self):
# Create an Image object for a PNG file.
file_name = "file.png"
pixbuf = gtk.gdk.pixbuf_new_from_file(file_name)
pixmap, mask = pixbuf.render_pixmap_and_mask()
image = gtk.Image()
image.set_from_pixmap(pixmap, mask)
# Create a window.
window = gtk.Window()
window.set_title("PNG file")
window.connect("destroy", gtk.main_quit)
# Show the PNG file in the window.
window.add(image)
window.show_all()
if __name__ == "__main__":
Gui()
gtk.main()
Run Code Online (Sandbox Code Playgroud)
致谢:我使用网络上其他人的代码创建了上述代码.
我使用 PyGTK,我想获取小部件的颜色(例如背景颜色),我运行这样的代码:
gdkColorToRgb = lambda gc: (gc.red//257, gc.green//257, gc.blue//257)
widget = gtk.HBox() ## for example
style = widget.get_style()
for i in range(5):
print i, gdkColorToRgb(style.bg[i])
Run Code Online (Sandbox Code Playgroud)
但它没有给出我当前的 gtk 主题(样式)的颜色。这似乎是默认的 gtk 主题(我当前的主题是深色的,而此代码给出了浅色)我使用 ArchLinux 和 PyGTK 2.24.0 (GTK 2.24.5)
我正在使用C和unix低级套接字处理聊天应用程序.我已经成功制作了控制台版本,但我想为应用程序制作一个GUI.我想将GTK用于GUI.我的问题是如何"同步"套接字和GUI.因为我必须调用gtk_main()作为最后一个GTK语句,并且应用程序本身是一个无限循环.如何在收到消息时更新GUI?
现在有没有人可以找到一些关于 gtk/glib 网络的好的教程/代码示例。我正在尝试编写一个客户端应用程序,该应用程序连接到一个简单的服务器,该服务器使用 Gtk2 回显它接收到的内容,但我不知道如何去做。我想在不使用线程的情况下进行异步读/写,但我不确定什么是最好的方法。API 参考没有太大帮助 - GIOChannel、GIOStream、GSocketClient 等 - 使用哪一个?
回退是在另一个线程中使用阻塞 IO。
我对便携性不感兴趣。
“咆哮:GTk / GLib 开发人员如何期望人们在没有良好文档的情况下使用他们的框架?当我可以使用 QT 来做时,我为什么还要费心。我不想学习更多的 C,这就是我费心的原因!”
我用GTK + 2.0测试了一些信号.我正在寻找一种方法来点击GtkEntry时发出信号.
if (widgets_info[i].action & IG_INPUT)
{
widget->frame[i] = gtk_entry_new_with_max_length(MAX_INPUT_LENGTH);
gtk_entry_set_text(widget->frame[i], widgets_info[i].text);
catch_signal(widget->frame[i], MY_SIGNAL, &change_entry, widget);
}
Run Code Online (Sandbox Code Playgroud)
我的条目(widgets_info[i].text)中有一个预先选择的文本,如果用户单击我的GtkEntry,我希望此文本消失.
有人知道这个信号是什么吗?
(对不起我的英语不好)
我正在使用GTK + 2.0和Cairo在C中编写自定义应用程序.仅用于学习目的(如果成功,然后用于部署),我希望重新创建类似于覆盖工具栏/窗口小部件(我很抱歉,如果术语不正确),当鼠标移动到窗口上的给定区域时出现,当鼠标移开时消失.正如我想象的那样,工具栏应该出现在现有小部件的顶部,而不会替换它们或以任何方式改变小部件包装.有可能完成吗?如果是,请您指出相关的教程/示例和/或概述一种方法来做同样的事情?提前致谢.
我正在用gcc编译我的c应用程序,并带有以下标志:
gcc evis.c `pkg-config --cflags --libs gtk+-2.0 --libs clutter-gtk-1.0 --libs gthread-2.0` -Wall -o evis
Run Code Online (Sandbox Code Playgroud)
现在我的代码编译了一些警告,但仍然完成.当我尝试运行我的程序时,我得到:
(evis:1820): Gtk-ERROR **: GTK+ 2.x symbols detected. Using GTK+ 2.x and GTK+ 3 in the same process is not supported
Run Code Online (Sandbox Code Playgroud)
如何解决此错误?我怎么知道在哪里看?我可以使用某种工具在我的代码中扫描GTK3符号吗?我正在使用GTK + 2进行编译,所以我不明白这是怎么回事.
我和朋友们一起使用gtkmm在C++中编写了一个简单的照片查看器.一切都进展顺利,除了我们的应用程序看起来很差,与我们的Linux桌面上的任何其他GTK +应用程序完全不同.如果有人能就我们做错了什么给我们一些建议,我们将非常感激.
负责创建窗口的代码在这里(其余的在存储库中):https: //github.com/jjkrol/ZPR/blob/master/src/gui.cpp
屏幕截图:
屏幕截图http://i39.tinypic.com/ktatc.png
任何帮助都会感激不尽,提前谢谢!
试图从 ImageSurface 创建 Pixbuf,但我得到的只是黑色像素。有任何想法吗?
Cairo.ImageSurface surface = mysurface;
int w = surface.Width;
int h = surface.Height;
Gdk.Pixmap pixmap = new Gdk.Pixmap(null, w, h, 24);
using (Cairo.Context cr = Gdk.CairoHelper.Create(pixmap)) {
cr.Operator = Cairo.Operator.Source;
cr.SetSource(surface);
cr.Paint();
}
_pixbuf = Gdk.Pixbuf.FromDrawable(pixmap, Gdk.Colormap.System, 0, 0, 0, 0, w, h);
Run Code Online (Sandbox Code Playgroud)