Python GTK 3 GUI 编程 -- 004 信号机制(Signal)

今天讲解 信号机制, 和众多gui开发工具一样, gtk也是信号驱动型.
每对控件的一次交互, 就发出一个信号, 比如, 点击Button, 发出Clicked (其实是 Pressed, Released两个信号)
所以可以通过信号机制来对每一次信号作出回应, 指调用某个函数
在pygobject中可以通过Gtk.Widget.connect("Signal", Function)来处理信号, 比如下面的例子

import gi
gi.require_version("Gtk", "3.0")

from gi.repository import Gtk


class MyWindow(Gtk.Window):
    def __init__(self):
        super(MyWindow, self).__init__(title="Signal")

        self.btn = Gtk.Button(label="Click Me")
        self.add(self.btn)

        self.btn.connect("clicked", self.on_click) #处理click信号, 调用on_click函数

    def on_click(self, widget): # 信号会自动把当前控件当作参数传入
        print("I got clicked")


win = MyWindow()
win.connect("destroy", Gtk.main_quit) # 处理destroy 信号, 当窗口关闭, 调用主退出函数
win.show_all()
Gtk.main()
Click

上面说过, def on_click(self, widget): ... 里面的widget就是发出信号的控件
所以可以直接使用, 来修改该控件的属性比如

def on_click(self, widget):
    widget.set_label("I Got Clicked") 

信号可以直接在 glade里面找到, (glade=> Gtk的gui创建工具安装方法自行百度)

Glade

常见的信号
enter
leave
clicked
destroy
focused_in
focused_out
add
remove
具体的可以在glade里面查

下篇文章讲下 盒子(Box)

你可能感兴趣的:(Python GTK 3 GUI 编程 -- 004 信号机制(Signal))