pygtk通过给label设置快捷键定位相邻插件

本分类前面的文章中讲到了通过组合器给插件添加热键,以及使用助记符给按钮插件设置快捷键,这一章节,我想谈一谈如何通过标签设置快捷键并将焦点传给绑定的插件(如entry)
首先介绍几个我们将会用到的函数:
1.创建具有助记符的标签

Gtk.Label.new_with_mnemonic(str)
参数:
str:标签的内容,其中在助记符前会有下划线,如"_label",助记符即为l
return:该函数的返回值是一个Gtk.Label
这个函数的功能等价于以下两个函数的作用:
label = Gtk.Label()
lagel.set_text_with_mnemonic("_label")

2.设置与label相关联插件,然后可以通过label助记符获得该插件焦点

Gtk.Label.set_mnemonic_widget(widget)
参数:
widget:目标插件

3.实例程序:

#!/usr/bin/env python2
# -*- coding: utf-8 -*-

# 中文编码支持“# -*- coding: utf-8 -*-”必须加到第一行或第二行

import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, Gdk

class mywindow(Gtk.Window):
    def __init__(self):
        Gtk.Window.__init__(self, title="Hello World")
        self.entry = Gtk.Entry()
        self.entry2 = Gtk.Entry()
        self.entry3 = Gtk.Entry()
        self.label = Gtk.Label("Gte(G)")
        self.label2 = Gtk.Label("Hte(H)") 
        #使用助记符给标签设置助记符,并设置关联插件
        self.label3 = Gtk.Label.new_with_mnemonic("_Ete(E)")
        self.label3.set_mnemonic_widget(self.entry3)
        self.button = Gtk.Button(label="button(e)")
        self.button2 = Gtk.Button(label="button2(f)")

        #使用助记符给按钮设置快捷键
        self.button3 = Gtk.Button.new_with_mnemonic("_Kick(k)")

        #使用组合器设置热键
        gag = Gtk.AccelGroup.new()
        self.button.add_accelerator("clicked",gag,Gdk.KEY_e, Gdk.ModifierType.MOD1_MASK,Gtk.AccelFlags.VISIBLE)
        self.button2.add_accelerator("clicked",gag,Gdk.KEY_f, Gdk.ModifierType.MOD1_MASK,Gtk.AccelFlags.VISIBLE)
        self.entry.add_accelerator("activate",gag,Gdk.KEY_g, Gdk.ModifierType.MOD1_MASK,Gtk.AccelFlags.VISIBLE)
        self.entry2.add_accelerator("activate",gag,Gdk.KEY_h, Gdk.ModifierType.MOD1_MASK,Gtk.AccelFlags.VISIBLE)
        self.button.connect("clicked",self.on_button_clicked)
        self.button2.connect("clicked",self.on_button_clicked2)
        self.button3.connect("clicked",self.on_button_clicked3)
        self.entry.connect("activate",self.on_entry_focus_in)
        self.entry2.connect("activate",self.on_entry2_focus_in)
        self.entry3.connect("focus-in-event", self.on_entry3_focus_in)

        self.box = Gtk.Box.new(Gtk.Orientation.VERTICAL,0)
        self.box2 = Gtk.Box.new(Gtk.Orientation.HORIZONTAL,0)
        self.box3 = Gtk.Box.new(Gtk.Orientation.HORIZONTAL,0)
        self.box4 = Gtk.Box.new(Gtk.Orientation.HORIZONTAL,0)

        self.box2.add(self.label)
        self.box2.add(self.entry)
        self.box3.add(self.label2)
        self.box3.add(self.entry2)
        self.box4.add(self.label3)
        self.box4.add(self.entry3)

        self.box.add(self.button)
        self.box.add(self.button2)
        self.box.add(self.button3)
        self.box.add(self.box2)
        self.box.add(self.box3)
        self.box.add(self.box4)

#        self.box.pack_start(self.button, True, True, 0)
#        self.box.pack_start(self.button2, True, True, 0)
#        self.box.pack_start(self.entry, True, True, 0)
#        self.box.pack_start(self.entry2, True, True, 0)
#        self.box.pack_start(self.button, True, True, 0)
#        self.box.pack_start(self.button, True, True, 0)

        self.add(self.box)
        self.add_accel_group(gag)

    def on_button_clicked(self, widget):
        print("button(e) is clicked")

    def on_button_clicked2(self, widget):
        print("button(f) is clicked")

    def on_button_clicked3(self, widget):
        print("Kick(k) is clicked")

    def on_entry_focus_in(self, widget):
        print("entry Gte(G) is select")

win = mywindow()
win.connect("delete-event",Gtk.main_quit)
win.show_all()
Gtk.main()

在上面代码中,创建了一个窗口,三个标签,三个输入框,三个按钮,entry,entry2,button,button2使用了之前组合器的方式创建快捷键,而entry3和button3使用了助记符创建快捷键,尤其entry3是我们本章节重点介绍的内容,在上面的程序中,通过alt+e,alt+f,alt+k分别可以按下button,button2,button3,通过alt+g,alt+h,alt+e分别可以定位到输入框.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值