问题标签 [gtk4]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
321 浏览

c - 为 GTK 2.24 和 GTK 3 和 GTK 4 创建菜单栏

GTK 4 将删除GtkMenu、GtkMenuBar 和 GtkMenuItem。为什么不呢,但是,有没有一种通用的方法可以用 C 语言为GTK 2.24GTK 3GTK 4创建经典菜单栏?

一个例子:

经典编辑菜单

0 投票
0 回答
60 浏览

gtk - 相当于 GTK4 中的 gtk_file_chooser_set_local_only()?

GTK3 文件选择器中,有一个功能gtk_file_chooser_set_local_only()可以确保用户只能选择本地文件(即那些具有可能传递给open()或的本地路径的文件fopen()),并且默认情况下启用了此限制。这个功能在 GTK4 中已经被移除,并且似乎没有任何替代品。此迁移文档提到该功能已被删除,现在 GTK4 文件选择器可以访问本地和非本地资源。

但是,如果我仍然想将结果仅限于本地资源,则没有提及我应该做什么。似乎没有我可以添加的“过滤器”。当然,我可以检查对话框关闭后返回的所选文件,如果所选文件是非本地的,则显示错误消息,但这意味着非本地资源仍然显示在对话框中。

如何将对话框显示限制为仅本地资源?

(为了上下文,我维护了一个跨平台的原生文件对话框库,我正在尝试为它编写一个 GTK4 后端。这个库的用户希望从对话框中获取一个或多个文件名,并且这些文件名可能会被传递供其他库使用,例如fopen()SDL_RWFromFile(),它们不理解非本地文件。虽然非本地文件和 GFile 抽象可能对使用整个 GTK 套件的人有用,但该库主要用于想要使用的程序GTK 仅用于它的文件选择器,因为它是大多数 Linux 上事实上的本机文件选择器。)

0 投票
0 回答
62 浏览

python - 在 Gtk 4.0 + X11 中列出窗口

以下代码使用 GDK 3 / Gnome 3.x 和 PyGObject 遍历窗口:

但是,这在 GDK4 中不再起作用。

文档和迁移指南很神秘......

当前迭代窗口的方法是什么?

0 投票
1 回答
66 浏览

c++ - 尝试在 lambda 函数中设置按钮标签时出现分段错误

我一直在尝试学习 gtkmm4,但我遇到了一个奇怪的运行时错误

我的代码:

错误:

当我单击按钮时会发生此错误。

0 投票
0 回答
160 浏览

c - gtk4透明绘图区

我目前正在将一些东西移植到 GTK4 中,并且大部分已经完成。但是,我根本无法获得透明度。大多数事情发生在需要透明的绘图区域内(对桌面的其余部分)。

我试图让绘图区域示例使用透明度,但它不起作用。这是我当前的代码:

在 GTK3 中,您需要将视觉效果设置为 RGB,但这应该在 gtk4 中消失(https://developer.gnome.org/gtk4/stable/gtk-migrating-3-to-4.html#id-1.7.4.3 .10 )。

有谁知道为什么这段代码不会在 GTK4 中产生透明窗口?

0 投票
1 回答
139 浏览

c - 在 gtk4 中创建统一的方形按钮网格

正如标题所说,我想在 gtk4 中创建一个统一的方形按钮网格,单元格之间没有(或很少)间距。看起来这应该很简单,但我一直在努力在 gtk 中实现这一点。

这是我要复制的示例的图片:range chart

这是针对与扑克相关的应用程序。这种图表在扑克软件中极为常见。用户应该能够选择任何单元格子集,每个单元格都代表一手牌。然后程序可以以各种方式处理这个子集(或称为“范围”)。

到目前为止,我的(失败的)尝试包括:

  1. 对每个包含 GtkAspectFrame 的子项使用 GtkGrid,其中包含 GtkToggleButton。图片

这种方法奏效了,但我在细胞之间留下了可怕的间隙,我不知道如何摆脱。另外,当我运行程序时,GTK 会吐出一堆看起来像这样的错误消息:

(window:29202): Gtk-CRITICAL **: 11:07:39.057: Allocation width too small. Tried to allocate 34x34, but GtkToggleButton 0x564febf98c10 needs at least 36x34.

  1. 使用具有 13 个 G_TYPE_STRING 列(每张卡一个)的 GtkListStore。然后我手动将 13 行中的每一行添加到列表存储中,并使用 GtkCellRendererText 将其显示为 GtkTreeView。图片

我能够显示文本,但仅此而已。GtkTreeView 似乎比面向单元格更面向行/列。甚至似乎没有办法选择单个单元格,而且默认情况下似乎也没有办法添加按钮。也许我可以用一堆自定义事件/信号来实现自定义 GtkCellRenderer?这似乎是一个相当大的兔子洞,所以我想先看看能不能得到一些指导。

除了最基本的实现之外,我最终希望每个单元格都能够拥有不一定总是显示的关联数据。我相信这表明 GtkTreeView 是正确的方法,如果有办法让它正常工作的话。

你可能会说,我对 Gtk 很陌生。我只玩了几天,试图理解文档并让它工作。这里的正确方法是什么?任何可以为我指明正确方向的提示将不胜感激。


作为奖励:通常,精心设计的扑克应用程序将允许您在按住鼠标按钮的同时将鼠标悬停在单元格上以选择您的范围。按住鼠标按钮时光标下的任何单元格都将添加到选择中。这通常比单击每个单独的单元格更方便。如何在 gtk4 中实现这种行为?

0 投票
0 回答
111 浏览

c - 如何加载 GTK4 演示示例?(特别是文件浏览器)

为了获得上下文,我正在制作一个 GUI 应用程序,它基于通过 GtkEntry 的输入命令,就像ls它会弹出一个窗口,其中包含该目录中的相应文件。所以 GTK4 演示有一个文件浏览器的示例,它可以完美地满足我的需求,但我就是无法让它工作!

这是我的项目结构:

main.c

mainApp.c

mainAppWindow.c

fileBrowserView.c

window.ui https://github.com/panchis7u7/Encryption_Algorithms/blob/master/GUI_User_Resource_Manager/ui/window.ui

file-browser.ui https://github.com/panchis7u7/Encryption_Algorithms/blob/master/GUI_User_Resource_Manager/ui/file-browser.ui

窗口.ui

如果我尝试运行代码,我会得到一个failed to add UI from resource /org/gtk/mainapp/ui/file-browser.ui: .:66:1 Invalid type 'FileBrowserView'

作为一种解决方案,我只是调用该方法以通过该file_browser_view_new()方法创建一个新的 FileBrowserView,并且可以正常工作,但是随后信号file-browser.ui不在的位置:failed to add UI from resource /org/gtk/mainapp/ui/file-browser.ui: No function named filebrowser_up_clicked_cb.

未找到信号和新文件浏览器

有关详细信息,这里是 github 中的项目:https ://github.com/panchis7u7/Encryption_Algorithms/tree/master/GUI_User_Resource_Manager

0 投票
0 回答
198 浏览

gtk - 如何在 gtk4 中获取属于 GtkDrawingArea 的 X Window?

我试图将 gstreamer 的 GUI 集成教程(https://gstreamer.freedesktop.org/documentation/tutorials/basic/toolkit-integration.html?gi-language=c)从 gtk3 移植到 gtk4。我在获取属于 GtkDrawingArea 的 X 窗口时遇到了问题。在 gtk3 中,要获取 XID 并将其传递给 GstVideoOverlay,使用以下方法:

我无法弄清楚如何在 Gtk4 中做同样的事情。由于 Gtk4 使用的是 Wayland 术语,因此 gdk 中获取 XID 的函数GDK_SURFACE_XID()将 GdkSurface* 作为参数,而 GtkWidget 中没有与 Gtk3 中类似的直接函数来获取指向 GdkSurface 的指针gtk_widget_get_window

我尝试使用gtk_widget_get_nativeGtkDrawingArea 获取 GtkNative 并将 GdkSurface 附加到它,但这是返回 GtkWindow 的表面。

我正在寻找一种方法来让 XID 传递给gst_video_overlay_set_window_handle能够在小部件中播放视频。

我对 Gtk 和 Gstreamer 都很陌生,因此对我的理解上的差距表示歉意。

0 投票
1 回答
216 浏览

c - 为什么 GTK 4 报告“断言 'GTK_IS_WIDGET (widget)' 失败”?

我创建了我认为最简单的 GTK 4 应用程序来创建一个带有菜单栏的窗口,该菜单栏GAction在单击菜单项时激活。

当我单击菜单栏中的“退出”或仅单击“文件”然后退出下拉菜单而不激活菜单项时,运行此代码会给我一个“严重”错误消息。在程序的单次运行期间,可能会多次产生错误。虽然应用程序没有崩溃,但显然我对 GTK 4 工作原理所做的一些基本假设是不正确的。

我注意到如果“退出”菜单项未激活(因为未注册“app.quit”操作),则不会出现错误消息。这表明问题出在GAction系统上,而不是GtkBuilderGMenu对象上。

我的代码的哪个方面导致断言失败?

0 投票
0 回答
36 浏览

c++ - 如何限制 GTK4 Combobox 的最大显示项目并激活滚动条?

我正在构建一个带有包含 60 多个项目的组合框的 GTK4 应用程序。我找不到限制显示项目的方法,以免出现滚动条。

问题截图