有没有一种简单的方法来改变GTK中文本元素的字体大小?现在,我能做的最好的事情就是set_markup在标签上做,有些傻话:
lbl.set_markup("<span font_desc='Tahoma 5.4'>%s</span>" % text)
Run Code Online (Sandbox Code Playgroud)
这1)要求我设置字体,2)似乎需要很多开销(必须解析标记),3)会让改变按钮等字体大小变得烦人.有没有更好的办法?
我是GUI编程的新手,我还没有发现什么库最适合我的目的(我想制作桌面环境应用程序,例如码头,面板,桌面等)我已经开始学习GTK的基础知识,主要是使用PyGTK的.我在网上找到的大多数教程都是针对GTK + 2.0的.最近,GTK + 3已经发布.所以我有点不确定这对我的学习曲线意味着什么:
由于我是新手,我会盲目地投入其中,但是一些指导可能更明智.所以如果你有,欢迎你:)
我在gschem上工作,这是一个用于编辑电子原理图的免费软件工具.最近我们使用包含GtkTextView的GtkScrolledWindow遇到了问题.
最新版本的Ubuntu使用覆盖滚动条,这意味着GtkScrolledWindows不再设置最小高度,为传统滚动条提供足够的空间(实际上,它们的最小高度为0).同样,没有显示文本的GtkTextView请求高度为0.这意味着gschem中的一个可滚动的GtkTextViews被显示为高度中的一个像素,这显然是不可用的.

在上面显示的屏幕截图右侧的对话框中,记下"值:"标签和"添加"按钮之间的不可见小部件.
一些用户已经独立报告了这一点 - 另请参阅错误报告.
显然,我们可以通过以下方式解决这个问题:
g_object_set (textview, "height-request", 100, NULL);
Run Code Online (Sandbox Code Playgroud)
然而,这非常不优雅,并且对于以像素设置非常大的字体大小的用户(例如,具有视力问题的用户或使用高DPI屏幕的用户)将会中断.
因此,理想情况下,我们希望将GtkTextView的最小大小设置为相对于默认字体大小,例如告诉它"显示至少三行文本".
有人能建议一个明智/优雅的方法吗?
libglade已更新,我的旧Glade xml文件具有信号的这些"交换"属性.加载文件时,这些属性会生成以下警告:
libglade-WARNING **: unknown attribute `swapped' for <signal>.
Run Code Online (Sandbox Code Playgroud)
我该如何修复这些警告?我可以只删除swapped属性,还是会导致问题?
我正在使用此代码创建一个带有彩色背景/文本的组合框:
GtkListStore *liststore;
GtkWidget *combo;
GtkCellRenderer *column;
liststore = gtk_list_store_new(3, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
for(int i=0; i<10; i++) {
gtk_list_store_insert_with_values(liststore, NULL, -1, 0, "Default", 1, "white", 2, "black", -1);
}
combo = gtk_combo_box_new_with_model(GTK_TREE_MODEL(liststore));
g_object_unref(liststore);
column = gtk_cell_renderer_text_new();
gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(combo), column, TRUE);
gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(combo), column, "text", 0, "foreground", 1, "background", 2, NULL);
Run Code Online (Sandbox Code Playgroud)
我的问题是,如何设置列表库或组合框的背景,以便图片中没有空格?谢谢!
GTK 4 将删除GtkMenu、GtkMenuBar 和 GtkMenuItem。为什么不呢,但是,有没有一种通用的方法可以用 C 语言为GTK 2.24和GTK 3和GTK 4创建经典菜单栏?
一个例子:

这就是我到目前为止所拥有的
GtkWidget* createConsoleBox()
{
GtkWidget* textArea = gtk_text_view_new();
GtkWidget* scrollbar = gtk_vscrollbar_new(gtk_text_view_get_vadjustment(GTK_TEXT_VIEW(textArea)));
GtkWidget* textEntry = gtk_entry_new();
GtkWidget* console = gtk_table_new(3, 2, FALSE);
gtk_table_attach_defaults(GTK_TABLE(console), textArea, 0, 1, 0, 1);
gtk_table_attach_defaults(GTK_TABLE(console), scrollbar, 1, 2, 0, 1);
gtk_table_attach_defaults(GTK_TABLE(console), textEntry, 0, 2, 1, 2);
return console;
}
Run Code Online (Sandbox Code Playgroud)
我希望文本视图可以滚动,因为文本开始填充框,但框继续扩展以容纳更多文本.如何限制文本视图的大小并创建可滚动的文本视图.
提前致谢 :-)
我有一个GtkDrawingArea用于可视化数据.根据数据库和用户输入,绘图可能会变得非常大(大于允许的最大GtkDrawingArea大小).因此,我想使用与当前窗口一样大的绘图区域,并在滚动时手动更新它.
如果我使用ScrolledWindow + Viewport方法将滚动条添加到绘图区域,它显然不起作用,因为绘图区域不够大,不需要滚动条.
有没有什么方法可以让视口欺骗认为底层小部件比实际大?如果不是什么是解决这个问题的最佳方法?
注意:我使用Gtk2并且不可能切换到Gtk3.
某些应用程序可以实时响应 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) 将用ruby构建的gtk2 / gtk3应用程序打包为Windows,Linux,MacOS的可执行文件,最令人头疼的技术是什么?
我找不到任何指南或助手来解决此问题,以解决ruby gtk的问题。红宝石-侏儒宝石也没有包装器。
我的理解是gtk是跨平台的,因此做到这一点并不容易。问题是我找不到可靠的例子作为例子并学习步骤。