- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我不知道 pygtk 中 connect()
和 connect_after()
有什么区别。有人可以用示例代码解释一下吗?
谢谢。
最佳答案
首先,这里是 g_signal_connect_after
的定义:
Connects a GCallback function to a signal for a particular object.The handler will be called after the default handler of the signal.
但是您可能会问默认处理程序是什么,好吧,GSignal description它非常具有描述性:
The basic concept of the signal system is that of the emission of a signal. Signals are introduced per-type and are identified through strings. Signals introduced for a parent type are available in derived types as well, so basically they are a per-type facility that is inherited.
A signal emission mainly involves invocation of a certain set of callbacks in precisely defined manner. There are two main categories of such callbacks, per-object ones and user provided ones. (Although signals can deal with any kind of instantiatable type, I'm referring to those types as "object types" in the following, simply because that is the context most users will encounter signals in.) The per-object callbacks are most often referred to as "object method handler" or "default (signal) handler", while user provided callbacks are usually just called "signal handler".
The object method handler is provided at signal creation time (this most frequently happens at the end of an object class' creation), while user provided handlers are frequently connected and disconnected to/from a certain signal on certain object instances.
A signal emission consists of five stages, unless prematurely stopped:
Invocation of the object method handler for G_SIGNAL_RUN_FIRST signals
Invocation of normal user-provided signal handlers (where the after flag is not set)
Invocation of the object method handler for G_SIGNAL_RUN_LAST signals
Invocation of user provided signal handlers (where the after flag is set)
Invocation of the object method handler for G_SIGNAL_RUN_CLEANUP signals
The user-provided signal handlers are called in the order they were connected in.
现在您知道了信号序列,接下来是 answer to a similar question但在 Gtk 邮件列表上:
g_signal_connect_after will let you run your user handler after the class's default handler; why is this usefull ?
Say I have an object that emits an "initialize" signal in which its class handler does the work, you probably want your handler to run after the class handler so that you can use the already initialized object in your function.
I think normally you dont have to use this method because signals of that nature are usually installed with G_SIGNAL_RUN_FIRST which; if I'm not mistaken means that it's default handler will be called before user handlers anyway.
在高级语言上使用它可能没有明显的需要,但是,例如,假设您想保证回调将是最后一个运行的用户回调,那么您可以使用此方法。 (注意 pygtk 已弃用,请使用 pygobject)。
一个简单的例子,我们连接两个方法,on_click2
和 on_click1
(按此顺序),通过为 on_click2 使用
我们确保它将最后运行(用户回调):connect_after
import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk
class Button(Gtk.Box):
def __init__(self, message):
Gtk.Box.__init__(self, spacing=6)
self.set_border_width(10)
button = Gtk.Button.new_with_label(message)
self.pack_start(button, True, True, 0)
button.connect_after("clicked", self.on_click2)
button.connect("clicked", self.on_click1)
def on_click1(self, widget):
print ("Click1 signal. connect normal");
def on_click2(self, widget):
print ("Click2 signal. connect after");
win = Gtk.Window()
button = Button("Test")
win.add (button)
win.connect("destroy", Gtk.main_quit)
win.show_all()
Gtk.main()
结果是 on_click2
是最后一个被调用的,尽管它是第一个连接的:
$ python <filename.py>
... (Click test button)...
Click1 signal. connect normal
Click2 signal. connect after
关于gtk - pygtk 中 connect() 和 connect_after() 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45899746/
我只想在给定 X 和 Y 的屏幕上放置一个图像。 最佳答案 使用 GtkFixed 容器到 GtkWindow 内的绝对位置 如果要绝对定位顶层窗口本身,请使用 gtk_window_move()。
如何将菜单栏粘贴在窗口顶部? 我正在使用 Gtk.VBox我添加了 Gtk.MenuBar里面。我正在使用 Gtk3 代码来源:http://pastebin.com/YHZQLzZg 谢谢 最佳答案
当有人建议我考虑使用 Twisted 时,我正在努力让一些异步事件在 PyGTK 下工作。 我知道 Twisted 最初是一个网络框架,但它可以用于其他事情。但是,我见过的每个示例都涉及大量基于网络的
操作系统:Ubuntu 15.10 我使用默认的 Python 解释器导入 pygtk 没有问题。但是我无法使用 Anaconda 解释器这样做。 Python 2.7.11 |Anaconda 2.
我正在设计一个 pygtk GUI 并想在其中嵌入一个外部应用程序。 有人知道如何做到这一点吗? 最佳答案 这取决于您要嵌入的应用程序,但如果另一个应用程序是 GTK 应用程序(或支持 XEMBED
我有一个 gtk.Notebook,我想从当前的 gtk.noteBook 选项卡中获取标签文本。我做到了: text = self.get_tab_label(self.get_nth_page(s
我正在使用自定义容器,我需要在其中重新排序小部件,但没有方法可以做到。所以我尝试删除所有小部件并按顺序再次添加它们。 问题是这不能很好地工作,再次添加它们后我看不到小部件,我想发生的事情是当我删除小部
我希望窗口透明,但标签的不透明度为 100%。我怎样才能做到这一点?顺便说一句:当我升级到 Ubuntu 12.04 的统一界面时,我注意到 window.set_opacity 不像在 GNOME
是否可以通过PyGTK取消选中组中的所有单选按钮?启动时没有选中任何单选按钮,因此我认为必须有一种方法可以将它们全部恢复为未选中状态。 最佳答案 应该没有。从本质上讲,单选按钮组是“选择多个”控件类型
我有一个 gtk.Entry() 对象,我想手动发出 focus-out-event。我需要传递给 emit 方法的第二个参数是什么? In [10]: d.emit('focus-out-event
我到处找,但似乎找不到改变边框颜色的方法。 例如我需要一个这样的按钮: gb = gtk.Button("Hi") gb.set_border_width(50) 现在我希望将边框着色为红色(这是一个
如果我在 pyGTK 中有一个组合框,并且想要设置一个字符串列表,然后单击其中一个激活命令,我该怎么做? 目前我有: self.combo_key = gtk.Combo() self
我想将一个窗口嵌入到另一个窗口中,有点像这样: 编辑:屏幕截图已删除,抱歉! 那是一个 wingdows 程序,不是用 GTK很难做的。 我尝试使用插头和 socket ,但显然我无法将 gtk.Wi
我正在尝试使用 PyGTK 创建一个窗口,该窗口已根据字符串数组动态创建单选按钮(一个看起来像 ["option 1", "option 2", "option 3"] 的数组将创建3 个单选按钮,带
如何创建将一个像素值设置为透明的 PyGTK 像素图?我知道它与创建深度为 1 的像素图并将其设置为 mask 有关,但我发现它要么不执行任何操作,要么在绘制时完全删除我的像素图。目前,我制作了一个像
我在更新自定义 GTK+ 小部件时遇到问题:VUWidget。Generator 类正在更新类Section 的level 属性,该类的子类具有VUWidget 属性。 Generator 类正确更新
我正在尝试学习 pygtk,并且正在为 axel 开发 GUI。 我的问题是我需要在主窗口中显示下载进度。 我使用了两个线程,一个用于下载,第二个用于进度计算。下载是由axel完成的但我的第二个线程直
我想设置窗口的大小,然后能够在程序运行时调整它的大小。我已经能够使窗口变大,但无法将其调整为小于原始设置大小。对于不同的项目,我还想知道如何制作它,使窗口根本无法调整大小。 最佳答案 对于第一个问题:
我正在做一个项目,我想从 MySQL 数据库加载数据并将其显示在 PyGTK 应用程序中以便于查看和配置。我的目标是让程序根据数据库内容自动添加新行,即。如果我向数据库添加一个新命令,我不需要对我的
我按照 this post. 中的说明进行操作一切都安装成功。但是,当我运行 python 时,我无法导入 pygtk。具体来说,它是这样说的: >>> 导入 pygtk\n “导入错误:没有名为 p
我是一名优秀的程序员,十分优秀!