如何在 Gtk StackSwitcher 中使用键盘快捷键?

用户8272300

我想要做的是制作一个快捷键来在第 1 页和第 2 页之间切换。例如,如果我不在那里,按Ctrl+S会带我到第 1 页,同样按Ctrl+R会带我到第 2 页。我搜索该文件,但我无法找到有关我所需要的东西。有没有办法实现它?请看下图:

堆栈切换器

在此处输入图片说明

这是片段:

class App(Gtk.Application):
def __init__(self, *args, **kwargs):
    super(App, self).__init__(*args, **kwargs)
    self.connect('activate', self.on_activate)

    self.send_stack = None
    self.receive_stack = None
    self.send_receive_stack = None
    self.header_button_handler_id = None
    self.pre_sign_widget = None

def on_activate(self, app):
    ui_file_path = os.path.join(
        os.path.dirname(os.path.abspath(__file__)),
        "app.ui")
    appwindow = 'applicationwindow1'
    builder = Gtk.Builder()
    builder.add_objects_from_file(ui_file_path, [appwindow])
    window = builder.get_object(appwindow)
    window.set_wmclass ("sign", "sign")
    window.set_title("sign")
    window.connect("delete-event", self.on_delete_window)
    self.headerbar = window.get_titlebar()
    self.header_button = builder.get_object("back_refresh_button")
    self.header_button.connect('clicked', self.on_header_button_clicked)

    sw = builder.get_object('stackswitcher1')
    # I want to be able to press Alt+S and Alt+R respectively
    # to switch the stack pages to Send and Receive.
    # sw.get_children()
    self.stack_switcher = sw

    self.send_receive_stack = builder.get_object("send_receive_stack")
    self.send_receive_stack.connect('notify::visible-child',
        self.on_sr_stack_switch)

    ## Load Send part
    self.send = SendApp()
    ss = self.send.stack
    p = ss.get_parent()
    if p:
        p.remove(ss)
    ss.connect('notify::visible-child', self.on_send_stack_switch)
    ss.connect('map', self.on_send_stack_mapped)
    klw = self.send.klw
    klw.connect("key-activated", self.on_key_activated)
    klw.connect("map", self.on_keylist_mapped)
    klw.props.margin_left = klw.props.margin_right = 15
    self.send_stack = ss
    ## End of loading send part

    # Load Receive part
    self.receive = PswMappingReceiveApp(self.on_presign_mapped)
    rs = self.receive.stack

    rs.connect('notify::visible-child',
        self.on_receive_stack_switch)


    scanner = self.receive.scanner
    scanner.connect("map", self.on_scanner_mapped)
    self.receive_stack = rs

    self.send_receive_stack.add_titled(self.send_stack,
        "send_stack", _("Send"))
    self.send_receive_stack.add_titled(rs,
        "receive_stack", _("Receive"))

    accel_group = Gtk.AccelGroup()
    window.add_accel_group(accel_group)
    self.receive.accept_button.add_accelerator("clicked", accel_group, ord('o'), Gdk.ModifierType.MOD1_MASK,
                                               Gtk.AccelFlags.VISIBLE)
    self.receive.accept_button.set_can_default(True)

    window.show_all()
    self.add_window(window)
呆子

这是一种获取具有两个孩子的堆栈的第一个和最后一个孩子的hacky方法:

#!/usr/bin/env python

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

class GUI:
    def __init__(self):

        self.stack  = Gtk.Stack()
        switcher = Gtk.StackSwitcher()
        switcher.set_stack(self.stack)
        label1 = Gtk.Label("label 1")
        label2 = Gtk.Label("label 2")
        label3 = Gtk.Label("label 3")
        self.stack.add_titled (label1, "1", "Page 1")
        self.stack.add_titled (label2, "2", "Page 2")
        self.stack.add_titled (label3, "3", "Page 3")
        box = Gtk.Box()
        box.pack_start(switcher, True, False, 0)
        box.pack_start(self.stack, True, True, 0)
        box.set_orientation(Gtk.Orientation.VERTICAL)
        window = Gtk.Window()
        window.add(box)

        window.show_all()
        window.connect("key-press-event", self.key_press)

    def key_press (self, window, event):
        keyname = Gdk.keyval_name(event.keyval)
        if not Gdk.ModifierType.CONTROL_MASK:
            #only continue when the CTRL key is down
            return         

        #get the last child

        if keyname == "r":
            for child in self.stack.get_children(): 
                self.stack.set_visible_child(child)

        #get the first child

        if keyname == "s":
            for child in self.stack.get_children():
                self.stack.set_visible_child(child)
                return

    def on_window_destroy(self, window):
        Gtk.main_quit()

def main():
    app = GUI()
    Gtk.main()

if __name__ == "__main__":
    sys.exit(main())

这是一种在具有两个以上孩子的堆栈中向前和向后滚动的hacky方法:

#!/usr/bin/env python

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

class GUI:
    def __init__(self):

        self.stack  = Gtk.Stack()
        switcher = Gtk.StackSwitcher()
        switcher.set_stack(self.stack)
        label1 = Gtk.Label("label 1")
        label2 = Gtk.Label("label 2")
        label3 = Gtk.Label("label 3")
        self.stack.add_titled (label1, "1", "Page 1")
        self.stack.add_titled (label2, "2", "Page 2")
        self.stack.add_titled (label3, "3", "Page 3")
        box = Gtk.Box()
        box.pack_start(switcher, True, False, 0)
        box.pack_start(self.stack, True, True, 0)
        box.set_orientation(Gtk.Orientation.VERTICAL)
        window = Gtk.Window()
        window.add(box)

        window.show_all()
        window.connect("key-press-event", self.key_press)

    def key_press (self, window, event):
        keyname = Gdk.keyval_name(event.keyval)
        if not Gdk.ModifierType.CONTROL_MASK:
            #only continue when the CTRL key is down
            return         

        #forward scroll

        #variable to capture the active widget
        previous_child_active = False  
        if keyname == "r":
            #iterate over the stack children
            for child in self.stack.get_children(): 
                if previous_child_active == True: 
                    # the last widget was the one that was active
                    self.stack.set_visible_child(child)
                    #finished
                    return                          
                #remember if the previous child was active
                previous_child_active = self.stack.get_visible_child() == child

        #reverse scroll

        #variable to capture the last widget we iterated
        previous_child = None        
        if keyname == "s":
            #iterate over the stack children
            for child in self.stack.get_children():
                if self.stack.get_visible_child() == child and previous_child != None: 
                    #this is the active widget, so we set the previous active
                    self.stack.set_visible_child(previous_child)
                    #finished
                    return                    
                #remember the last widget       
                previous_child = child       

    def on_window_destroy(self, window):
        Gtk.main_quit()

def main():
    app = GUI()
    Gtk.main()

if __name__ == "__main__":
    sys.exit(main())

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用键盘快捷键挂起?

来自分类Dev

如何使用|| 在键盘快捷键上?

来自分类Dev

如何在Sublime Text中使用键盘快捷键插入一小段文本?

来自分类Dev

如何在Ubuntu中使用键盘快捷键更改显示方向?

来自分类Dev

如何在Gnome 2中使用键盘快捷键运行终端?

来自分类Dev

如何在MS Word 2013中使用键盘快捷键进行放大和缩小?

来自分类Dev

如何在Sublime Text中使用键盘快捷键插入一小段文本?

来自分类Dev

如何在Excel中使用键盘快捷键忽略自动完成功能?

来自分类Dev

如何在Firefox中使用键盘快捷键从外部打开PDF?

来自分类Dev

如何在14.04中使用键盘快捷键并排放置3个窗口?

来自分类Dev

如何在Anki中使用键盘快捷键输入LaTeX方程式?

来自分类Dev

如何在macOS终端中使用键盘快捷键选择一行?

来自分类Dev

在Mac OS X中使用键盘快捷键时如何禁用顶部菜单闪烁

来自分类Dev

如何在 xfce4-terminal 中使用键盘快捷键而不是鼠标清除回滚和重置?

来自分类Dev

GTK3 +键盘快捷键,无信号匹配

来自分类Dev

如何使用键盘快捷键打开菜单?

来自分类Dev

如何使用键盘快捷键排列窗口?

来自分类Dev

如何使用键盘快捷键启动应用程序?

来自分类Dev

如何使用bash别名或函数中的键盘快捷键?

来自分类Dev

如何使用键盘快捷键将窗口居中?

来自分类Dev

如何使用键盘快捷键更改背景

来自分类Dev

macOS:如何使用键盘快捷键使特定程序前进?

来自分类Dev

如何使用键盘快捷键运行 Gulp 任务

来自分类Dev

如何删除Anaconda的键盘快捷键

来自分类Dev

如何创建通用键盘快捷键?

来自分类Dev

如何禁用键盘快捷键?

来自分类Dev

如何删除Anaconda的键盘快捷键

来自分类Dev

如何创建通用键盘快捷键?

来自分类Dev

如何修改Firefox的键盘快捷键?

Related 相关文章

  1. 1

    如何使用键盘快捷键挂起?

  2. 2

    如何使用|| 在键盘快捷键上?

  3. 3

    如何在Sublime Text中使用键盘快捷键插入一小段文本?

  4. 4

    如何在Ubuntu中使用键盘快捷键更改显示方向?

  5. 5

    如何在Gnome 2中使用键盘快捷键运行终端?

  6. 6

    如何在MS Word 2013中使用键盘快捷键进行放大和缩小?

  7. 7

    如何在Sublime Text中使用键盘快捷键插入一小段文本?

  8. 8

    如何在Excel中使用键盘快捷键忽略自动完成功能?

  9. 9

    如何在Firefox中使用键盘快捷键从外部打开PDF?

  10. 10

    如何在14.04中使用键盘快捷键并排放置3个窗口?

  11. 11

    如何在Anki中使用键盘快捷键输入LaTeX方程式?

  12. 12

    如何在macOS终端中使用键盘快捷键选择一行?

  13. 13

    在Mac OS X中使用键盘快捷键时如何禁用顶部菜单闪烁

  14. 14

    如何在 xfce4-terminal 中使用键盘快捷键而不是鼠标清除回滚和重置?

  15. 15

    GTK3 +键盘快捷键,无信号匹配

  16. 16

    如何使用键盘快捷键打开菜单?

  17. 17

    如何使用键盘快捷键排列窗口?

  18. 18

    如何使用键盘快捷键启动应用程序?

  19. 19

    如何使用bash别名或函数中的键盘快捷键?

  20. 20

    如何使用键盘快捷键将窗口居中?

  21. 21

    如何使用键盘快捷键更改背景

  22. 22

    macOS:如何使用键盘快捷键使特定程序前进?

  23. 23

    如何使用键盘快捷键运行 Gulp 任务

  24. 24

    如何删除Anaconda的键盘快捷键

  25. 25

    如何创建通用键盘快捷键?

  26. 26

    如何禁用键盘快捷键?

  27. 27

    如何删除Anaconda的键盘快捷键

  28. 28

    如何创建通用键盘快捷键?

  29. 29

    如何修改Firefox的键盘快捷键?

热门标签

归档