【问题标题】:Workaround for making Gtk.Label a drag source?使 Gtk.Label 成为拖动源的解决方法?
【发布时间】:2014-10-16 17:57:21
【问题描述】:

我是 Gtk DnD 的新手,我正在尝试将 Gtk.Label 设为拖动源。

根据pygobject creating a drag and drop source看来直接不可能

解决方法似乎是一个周围的不可见事件框GtkEventBox(感谢@jku)

但是文档说: “对于一个窗口在子窗口下方的不可见事件框存在一个意外问题。由于仅输入窗口不是事件框的后代小部件创建的任何窗口的祖先窗口,因此这些窗口上的事件不会传播“

那么,我可以在我的 Label above 上有一个不可见的 GtkEventBox 吗? 如果 GtkEventBox 在下方,GtkLabel 是否会捕获事件并将它们冒泡?

回答我:

用 GtkEventBox 包围 GtkLabel 没有任何问题。 并且被包围的 GtkLabel 仍然接收 DnD 丢弃事件(有和没有“可见窗口”= False)。

自从它奏效以来,我根本没有玩过 set_above_child。

【问题讨论】:

标签: drag-and-drop gtk draggable pygtk


【解决方案1】:

GtkEventBox 设计用于处理没有自己的 GdkWindow 的小部件的输入事件。将您的标签放在事件框内,并将事件框用作 dnd 源。

HBox 不能工作,因为它也没有 GdkWindow。

【讨论】:

  • 该标签不会捕获任何事件,因为它没有 GdkWindow(如果有,则根本不需要事件框)。所以我看不到事件传播问题会如何出现。为什么不尝试一下——这不像我们在谈论大量的代码。
  • 顺便说一句,在谈到少量代码时,我通常指的是事件处理(如鼠标点击):我不想给人一种 DnD 非常简单直接的印象......
  • 它没有任何问题。并且被包围的 GtkLabel 仍然会收到 DnD 丢弃事件。 (有和没有可见窗口=假)。非常感谢!
猜你喜欢
  • 1970-01-01
  • 2010-09-21
  • 2012-02-24
  • 2013-10-23
  • 2016-05-22
  • 1970-01-01
  • 1970-01-01
  • 2021-05-26
相关资源
最近更新 更多