【问题标题】:How to set a widget to drag an undecorated Window in Vala?如何设置小部件以在 Vala 中拖动未装饰的窗口?
【发布时间】:2016-06-08 07:23:19
【问题描述】:

这似乎是一个简单的问题。我是 Gtk 和 Vala 编程的初学者。我也是一个初学者程序员。我从 Vala Gtk GUI 开始,现在我有一个不可拖动的未装饰窗口。 我需要设置一个自定义的类似标题栏的小部件来拖动窗口。我已经读过它是可行的,并在使用 Python 时看到了它,但不是 Vala。

我想让 Add 和 Close 之间的区域可拖动 - 它是一个 Gtk 水平框。

我需要帮助才能在 Vala 中实现这一点。请帮忙。

提前致谢。

【问题讨论】:

  • 是的,但它工作更好地装饰。
  • 添加和关闭按钮的布局听起来像是您想要使用 GtkHeaderBar 而不是完全未装饰的窗口。 Gtk.Window.set_titlebar() 会将窗口的标题栏更改为任意小部件,例如标题栏。除此之外,您需要在窗口本身上捕获鼠标事件并每次重新定位窗口。
  • 更多代码后,这就是它的样子i.imgur.com/7P4W2wK.png?1 它开始以我的小编码技能成形@JensMühlenhoff 它是否可以在所有 Linux 发行版上工作,除了那些使用韦兰?
  • @andlabs 非常感谢您提出使用标题栏的想法。我现在才使用它,它允许我拖动窗口! i.imgur.com/C6ppsHL.png?1
  • @oldtechaa 是的,因为我的想法奏效了,所以我把它变成了一个包含更多细节的答案 =P

标签: user-interface gtk vala


【解决方案1】:

GTK+ 确实支持客户端装饰,这意味着您提供窗口装饰而不是窗口管理器。这是通过gtk_window_set_titlebar() 完成的,它使用任意GtkWidget 作为标题栏。

GTK+ 提供了 GtkHeaderBar,一个完整的标题栏,您可以在其中添加任意小部件(与 GtkBox 相同)。您可能已经看到许多 GNOME 程序已经在使用它们。您的屏幕截图看起来像 GtkHeaderBar 的作业,添加按钮被打包到开头,关闭按钮被打包到末尾。只需将其设置为 GtkWindow 的标题栏,您就可以开始使用了。 (您可能还需要删除标准的最小化/最大化/关闭按钮;还有一个 GtkHeaderBar 方法。)

当然,GtkHeaderBar 默认看起来像标准的窗口管理器装饰。您可以使用 CSS 更改外观,甚至可以更改标题栏中按钮的外观(仅限)。您在 cmets 中的屏幕截图表明您已经这样做了;干得好!

【讨论】:

    猜你喜欢
    • 2012-10-23
    • 2015-03-21
    • 1970-01-01
    • 2013-08-12
    • 2017-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多