【问题标题】:Adding button_press_event to Gtk.Image?将 button_press_event 添加到 Gtk.Image?
【发布时间】:2017-04-19 11:33:51
【问题描述】:

我尝试创建一个自定义 Gtk.Image 来处理“点击”信号,但是当我尝试从自定义 Gtk.Image 发出信号时,但无法弄清楚为什么有按钮按下事件。

类 WindowButton(Gtk.Image): gtype_name = "窗口按钮"

__gsignals__ = {
    "clicked" : (GObject.SIGNAL_ACTION,None,(Gdk.Event,))
}

def __init__(self,*args,**kwargs):
    Gtk.Image.__init__(self,*args,**kwargs)

    self.set_from_stock(Gtk.STOCK_OK,Gtk.IconSize.SMALL_TOOLBAR)

    self.event = Gdk.Event.new(Gdk.EventType.BUTTON_PRESS)

    self.emit("button-press-event",self.event)

    self.connect("button-press-event",self.on_button_press_event)
    self.connect("clicked",self.do_clicked)

def on_button_press_event(self,event):
    print(ButtonPressEvent)
    print(event)

    self.emit("clicked",self.event)

def do_clicked(self,event):
    print('clicked')
    print(event)

【问题讨论】:

  • 你想不通什么
  • 当有按钮按下事件时为什么不发出信号。

标签: python-3.x gtk3 pygobject gobject-introspection


【解决方案1】:

GtkImage 没有像“点击”这样的信号。将您的 GtkImage 放入 EventBox 并将您的信号连接到 EventBox

【讨论】:

  • 是的,我知道。这就是为什么我试图创建一个支持点击信号的新 Gtk.Image 类型。
  • 您需要继承一个 EventBox,然后将您的 Image 打包到里面并连接您的所有信号。如果您没有子类化经验,请发布您尝试/想要做的事情,我会在接下来的几天里看看我的时间如何......
  • 如果是这种情况,我可能不会尝试创建自定义 Gtk.Image。我会将图像打包在 EventBox 中,因为它处理 button_press_event 。但我不希望我的形象出现在容器中。我不希望图像在收到 Gdk.EventType.BUTTON_PRESS 时发出点击信号,就像普通的 Gtk.Button 一样。
  • 好的,你有两个选择。使用按钮并将图像放入其中。或者将您的 GtkImage 小部件放在 EventBox 中。我认为您应该尝试使用 EventBox。这种类型的容器与您通常使用的其他 Gtk 容器不同,它几乎是透明的,除了信号和相关操作。 developer.gnome.org/gtk3/stable/… 的文档清楚地告诉您,如果没有 EventBox,GtkImage 就没有事件处理。
  • 好的,所以我搜索了非常古老的 Gtk2 文档。问题是 Gtk.Image 不是窗口小部件,因此 Gdk 不能真正向它发送事件。这意味着我要么必须从基本 Gtk.Widget 创建图像,要么必须采用使用 Gtk.EventBox 的方式并操作图像,认为事件框无法找到方法,将其设置为 Window WIdget在它已经被定义为非窗口小部件之后。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多