Это интересная концепция и хороший способ работать со стыковкой с краем, где два монитора встречаются
Вот код, который наконец-то сработал. Поскольку это сильно зависит от моей среды разработки Quickly + Glade + Python + Gtk, я делаю это независимым ответом. Ответ Брайса очень помог, и мои обмены с aking1012 .
Фактический код в текстовом редакторе:
# Accelerators
self.my_accelerators = Gtk.AccelGroup()
self.window = self.builder.get_object("discvur_window")
self.window.add_accel_group(self.my_accelerators)
self.entry = self.builder.get_object("entry1")
self.add_accelerator(self.entry, "<Control>b", signal="backspace")
…
def add_accelerator(self, widget, accelerator, signal="activate"):
"""Adds a keyboard shortcut"""
if accelerator is not None:
#if DEBUG:
#print accelerator, widget.get_tooltip_text()
key, mod = Gtk.accelerator_parse(accelerator)
widget.add_accelerator(signal, self.my_accelerators, key, mod, Gtk.AccelFlags.VISIBLE)
print "The accelerator is well added with the signal " + signal
def on_erasing(self, widget):
print "It works."
В Glade я создал GtkEntry под названием «entry1» в моем окне под названием «discvur_window». На вкладке «Сигналы» я дал сигнал «backspace» обработчика под названием «on_erasing».
Теперь, нажав Backspace или Ctrl + B, терминал распечатает «It works».
Вот код, который наконец-то сработал. Поскольку это сильно зависит от моей среды разработки Quickly + Glade + Python + Gtk, я делаю это независимым ответом. Ответ Брайса очень помог, и мои обмены с aking1012 .
Фактический код в текстовом редакторе:
# Accelerators
self.my_accelerators = Gtk.AccelGroup()
self.window = self.builder.get_object("discvur_window")
self.window.add_accel_group(self.my_accelerators)
self.entry = self.builder.get_object("entry1")
self.add_accelerator(self.entry, "<Control>b", signal="backspace")
…
def add_accelerator(self, widget, accelerator, signal="activate"):
"""Adds a keyboard shortcut"""
if accelerator is not None:
#if DEBUG:
#print accelerator, widget.get_tooltip_text()
key, mod = Gtk.accelerator_parse(accelerator)
widget.add_accelerator(signal, self.my_accelerators, key, mod, Gtk.AccelFlags.VISIBLE)
print "The accelerator is well added with the signal " + signal
def on_erasing(self, widget):
print "It works."
В Glade я создал GtkEntry под названием «entry1» в моем окне под названием «discvur_window». На вкладке «Сигналы» я дал сигнал «backspace» обработчика под названием «on_erasing».
Теперь, нажав Backspace или Ctrl + B, терминал распечатает «It works».
Вот код, который наконец-то сработал. Поскольку это сильно зависит от моей среды разработки Quickly + Glade + Python + Gtk, я делаю это независимым ответом. Ответ Брайса очень помог, и мои обмены с aking1012 .
Фактический код в текстовом редакторе:
# Accelerators
self.my_accelerators = Gtk.AccelGroup()
self.window = self.builder.get_object("discvur_window")
self.window.add_accel_group(self.my_accelerators)
self.entry = self.builder.get_object("entry1")
self.add_accelerator(self.entry, "<Control>b", signal="backspace")
…
def add_accelerator(self, widget, accelerator, signal="activate"):
"""Adds a keyboard shortcut"""
if accelerator is not None:
#if DEBUG:
#print accelerator, widget.get_tooltip_text()
key, mod = Gtk.accelerator_parse(accelerator)
widget.add_accelerator(signal, self.my_accelerators, key, mod, Gtk.AccelFlags.VISIBLE)
print "The accelerator is well added with the signal " + signal
def on_erasing(self, widget):
print "It works."
В Glade я создал GtkEntry под названием «entry1» в моем окне под названием «discvur_window». На вкладке «Сигналы» я дал сигнал «backspace» обработчика под названием «on_erasing».
Теперь, нажав Backspace или Ctrl + B, терминал распечатает «It works».
Вот код, который наконец-то сработал. Поскольку это сильно зависит от моей среды разработки Quickly + Glade + Python + Gtk, я делаю это независимым ответом. Ответ Брайса очень помог, и мои обмены с aking1012 .
Фактический код в текстовом редакторе:
# Accelerators
self.my_accelerators = Gtk.AccelGroup()
self.window = self.builder.get_object("discvur_window")
self.window.add_accel_group(self.my_accelerators)
self.entry = self.builder.get_object("entry1")
self.add_accelerator(self.entry, "<Control>b", signal="backspace")
…
def add_accelerator(self, widget, accelerator, signal="activate"):
"""Adds a keyboard shortcut"""
if accelerator is not None:
#if DEBUG:
#print accelerator, widget.get_tooltip_text()
key, mod = Gtk.accelerator_parse(accelerator)
widget.add_accelerator(signal, self.my_accelerators, key, mod, Gtk.AccelFlags.VISIBLE)
print "The accelerator is well added with the signal " + signal
def on_erasing(self, widget):
print "It works."
В Glade я создал GtkEntry под названием «entry1» в моем окне под названием «discvur_window». На вкладке «Сигналы» я дал сигнал «backspace» обработчика под названием «on_erasing».
Теперь, нажав Backspace или Ctrl + B, терминал распечатает «It works».
Вот код, который наконец-то сработал. Поскольку это сильно зависит от моей среды разработки Quickly + Glade + Python + Gtk, я делаю это независимым ответом. Ответ Брайса очень помог, и мои обмены с aking1012 .
Фактический код в текстовом редакторе:
# Accelerators
self.my_accelerators = Gtk.AccelGroup()
self.window = self.builder.get_object("discvur_window")
self.window.add_accel_group(self.my_accelerators)
self.entry = self.builder.get_object("entry1")
self.add_accelerator(self.entry, "<Control>b", signal="backspace")
…
def add_accelerator(self, widget, accelerator, signal="activate"):
"""Adds a keyboard shortcut"""
if accelerator is not None:
#if DEBUG:
#print accelerator, widget.get_tooltip_text()
key, mod = Gtk.accelerator_parse(accelerator)
widget.add_accelerator(signal, self.my_accelerators, key, mod, Gtk.AccelFlags.VISIBLE)
print "The accelerator is well added with the signal " + signal
def on_erasing(self, widget):
print "It works."
В Glade я создал GtkEntry под названием «entry1» в моем окне под названием «discvur_window». На вкладке «Сигналы» я дал сигнал «backspace» обработчика под названием «on_erasing».
Теперь, нажав Backspace или Ctrl + B, терминал распечатает «It works».
Вот код, который наконец-то сработал. Поскольку это сильно зависит от моей среды разработки Quickly + Glade + Python + Gtk, я делаю это независимым ответом. Ответ Брайса очень помог, и мои обмены с aking1012 .
Фактический код в текстовом редакторе:
# Accelerators
self.my_accelerators = Gtk.AccelGroup()
self.window = self.builder.get_object("discvur_window")
self.window.add_accel_group(self.my_accelerators)
self.entry = self.builder.get_object("entry1")
self.add_accelerator(self.entry, "<Control>b", signal="backspace")
…
def add_accelerator(self, widget, accelerator, signal="activate"):
"""Adds a keyboard shortcut"""
if accelerator is not None:
#if DEBUG:
#print accelerator, widget.get_tooltip_text()
key, mod = Gtk.accelerator_parse(accelerator)
widget.add_accelerator(signal, self.my_accelerators, key, mod, Gtk.AccelFlags.VISIBLE)
print "The accelerator is well added with the signal " + signal
def on_erasing(self, widget):
print "It works."
В Glade я создал GtkEntry под названием «entry1» в моем окне под названием «discvur_window». На вкладке «Сигналы» я дал сигнал «backspace» обработчика под названием «on_erasing».
Теперь, нажав Backspace или Ctrl + B, терминал распечатает «It works».
Вот код, который наконец-то сработал. Поскольку это сильно зависит от моей среды разработки Quickly + Glade + Python + Gtk, я делаю это независимым ответом. Ответ Брайса очень помог, и мои обмены с aking1012 .
Фактический код в текстовом редакторе:
# Accelerators
self.my_accelerators = Gtk.AccelGroup()
self.window = self.builder.get_object("discvur_window")
self.window.add_accel_group(self.my_accelerators)
self.entry = self.builder.get_object("entry1")
self.add_accelerator(self.entry, "<Control>b", signal="backspace")
…
def add_accelerator(self, widget, accelerator, signal="activate"):
"""Adds a keyboard shortcut"""
if accelerator is not None:
#if DEBUG:
#print accelerator, widget.get_tooltip_text()
key, mod = Gtk.accelerator_parse(accelerator)
widget.add_accelerator(signal, self.my_accelerators, key, mod, Gtk.AccelFlags.VISIBLE)
print "The accelerator is well added with the signal " + signal
def on_erasing(self, widget):
print "It works."
В Glade я создал GtkEntry под названием «entry1» в моем окне под названием «discvur_window». На вкладке «Сигналы» я дал сигнал «backspace» обработчика под названием «on_erasing».
Теперь, нажав Backspace или Ctrl + B, терминал распечатает «It works».
Вот код, который наконец-то сработал. Поскольку это сильно зависит от моей среды разработки Quickly + Glade + Python + Gtk, я делаю это независимым ответом. Ответ Брайса очень помог, и мои обмены с aking1012 .
Фактический код в текстовом редакторе:
# Accelerators
self.my_accelerators = Gtk.AccelGroup()
self.window = self.builder.get_object("discvur_window")
self.window.add_accel_group(self.my_accelerators)
self.entry = self.builder.get_object("entry1")
self.add_accelerator(self.entry, "<Control>b", signal="backspace")
…
def add_accelerator(self, widget, accelerator, signal="activate"):
"""Adds a keyboard shortcut"""
if accelerator is not None:
#if DEBUG:
#print accelerator, widget.get_tooltip_text()
key, mod = Gtk.accelerator_parse(accelerator)
widget.add_accelerator(signal, self.my_accelerators, key, mod, Gtk.AccelFlags.VISIBLE)
print "The accelerator is well added with the signal " + signal
def on_erasing(self, widget):
print "It works."
В Glade я создал GtkEntry под названием «entry1» в моем окне под названием «discvur_window». На вкладке «Сигналы» я дал сигнал «backspace» обработчика под названием «on_erasing».
Теперь, нажав Backspace или Ctrl + B, терминал распечатает «It works».
Вот несколько бит кода из одного из моих приложений Python + Gtk, далее расширенный в соответствии с комментариями к этому ответу:
self.my_accelerators = Gtk.AccelGroup()
self.entry = Gtk.builder.get_object("entry1")
self.add_accelerator(self.entry, "<Control>b", signal="backspace")
...
def add_accelerator(self, widget, accelerator, signal="activate"):
"""Adds a keyboard shortcut"""
if accelerator is not None:
#if DEBUG:
#print accelerator, widget.get_tooltip_text()
key, mod = Gtk.accelerator_parse(accelerator)
widget.add_accelerator(signal, self.my_accelerators, key, mod, Gtk.AccelFlags.VISIBLE)
Я переупаковал приведенные ответы в этом потоке в отдельный пример:
#!/usr/bin/env python2
import signal
from gi.repository import Gtk
def bind_accelerator(accelerators, widget, accelerator, signal='clicked'):
key, mod = Gtk.accelerator_parse(accelerator)
widget.add_accelerator(signal, accelerators, key, mod, Gtk.AccelFlags.VISIBLE)
def on_recompute_base_encryption_key_hash(widget):
print 'Thinking... (This could take forever)'
def main():
if 'gtk':
window = Gtk.Window()
window.connect("delete-event", Gtk.main_quit)
if 'accelerator-demo':
# Accelerators
accelerators = Gtk.AccelGroup()
window.add_accel_group(accelerators)
# Widget
target_widget = Gtk.Button('Recompute Base Encryption Key Hash')
target_widget.connect('clicked', on_recompute_base_encryption_key_hash)
window.add(target_widget)
# Bind
bind_accelerator(accelerators, target_widget, '<Control>b')
window.show_all()
signal.signal(signal.SIGINT, signal.SIG_DFL)
Gtk.main()
if __name__ == '__main__':
main()
Также доступен как gist: https://gist.github.com/thorsummoner/230bed5bbd3380bd5949 [!d1 ] Примечание: сигнал по умолчанию clicked, а не activate, потому что приложения никогда не должны подключаться к сигналу ::activate, но использовать сигнал Gtk.Button ::clicked.
Вот несколько бит кода из одного из моих приложений Python + Gtk, далее расширенный в соответствии с комментариями к этому ответу:
self.my_accelerators = Gtk.AccelGroup()
self.entry = Gtk.builder.get_object("entry1")
self.add_accelerator(self.entry, "<Control>b", signal="backspace")
...
def add_accelerator(self, widget, accelerator, signal="activate"):
"""Adds a keyboard shortcut"""
if accelerator is not None:
#if DEBUG:
#print accelerator, widget.get_tooltip_text()
key, mod = Gtk.accelerator_parse(accelerator)
widget.add_accelerator(signal, self.my_accelerators, key, mod, Gtk.AccelFlags.VISIBLE)
Я переупаковал данные ответы в этом потоке в отдельный пример:
#!/usr/bin/env python2
import signal
from gi.repository import Gtk
def bind_accelerator(accelerators, widget, accelerator, signal='clicked'):
key, mod = Gtk.accelerator_parse(accelerator)
widget.add_accelerator(signal, accelerators, key, mod, Gtk.AccelFlags.VISIBLE)
def on_recompute_base_encryption_key_hash(widget):
print 'Thinking... (This could take forever)'
def main():
if 'gtk':
window = Gtk.Window()
window.connect("delete-event", Gtk.main_quit)
if 'accelerator-demo':
# Accelerators
accelerators = Gtk.AccelGroup()
window.add_accel_group(accelerators)
# Widget
target_widget = Gtk.Button('Recompute Base Encryption Key Hash')
target_widget.connect('clicked', on_recompute_base_encryption_key_hash)
window.add(target_widget)
# Bind
bind_accelerator(accelerators, target_widget, '<Control>b')
window.show_all()
signal.signal(signal.SIGINT, signal.SIG_DFL)
Gtk.main()
if __name__ == '__main__':
main()
Также доступен как сущность: https://gist.github.com/ thorsummoner / 230bed5bbd3380bd5949
blockquote>Примечание: сигнал по умолчанию
clicked
, а неactivate
, поскольку приложения никогда не должны подключаться к сигналу::activate
, но использовать Gtk.Button::clicked
.
Вот несколько бит кода из одного из моих приложений Python + Gtk, далее расширенный в соответствии с комментариями к этому ответу:
self.my_accelerators = Gtk.AccelGroup()
self.entry = Gtk.builder.get_object("entry1")
self.add_accelerator(self.entry, "<Control>b", signal="backspace")
...
def add_accelerator(self, widget, accelerator, signal="activate"):
"""Adds a keyboard shortcut"""
if accelerator is not None:
#if DEBUG:
#print accelerator, widget.get_tooltip_text()
key, mod = Gtk.accelerator_parse(accelerator)
widget.add_accelerator(signal, self.my_accelerators, key, mod, Gtk.AccelFlags.VISIBLE)
Я переупаковал данные ответы в этом потоке в отдельный пример:
#!/usr/bin/env python2
import signal
from gi.repository import Gtk
def bind_accelerator(accelerators, widget, accelerator, signal='clicked'):
key, mod = Gtk.accelerator_parse(accelerator)
widget.add_accelerator(signal, accelerators, key, mod, Gtk.AccelFlags.VISIBLE)
def on_recompute_base_encryption_key_hash(widget):
print 'Thinking... (This could take forever)'
def main():
if 'gtk':
window = Gtk.Window()
window.connect("delete-event", Gtk.main_quit)
if 'accelerator-demo':
# Accelerators
accelerators = Gtk.AccelGroup()
window.add_accel_group(accelerators)
# Widget
target_widget = Gtk.Button('Recompute Base Encryption Key Hash')
target_widget.connect('clicked', on_recompute_base_encryption_key_hash)
window.add(target_widget)
# Bind
bind_accelerator(accelerators, target_widget, '<Control>b')
window.show_all()
signal.signal(signal.SIGINT, signal.SIG_DFL)
Gtk.main()
if __name__ == '__main__':
main()
Также доступен как сущность: https://gist.github.com/ thorsummoner / 230bed5bbd3380bd5949
blockquote>Примечание: сигнал по умолчанию
clicked
, а неactivate
, поскольку приложения никогда не должны подключаться к сигналу::activate
, но использовать Gtk.Button::clicked
.
Я переупаковал данные ответы в этом потоке в отдельный пример:
#!/usr/bin/env python2
import signal
from gi.repository import Gtk
def bind_accelerator(accelerators, widget, accelerator, signal='clicked'):
key, mod = Gtk.accelerator_parse(accelerator)
widget.add_accelerator(signal, accelerators, key, mod, Gtk.AccelFlags.VISIBLE)
def on_recompute_base_encryption_key_hash(widget):
print 'Thinking... (This could take forever)'
def main():
if 'gtk':
window = Gtk.Window()
window.connect("delete-event", Gtk.main_quit)
if 'accelerator-demo':
# Accelerators
accelerators = Gtk.AccelGroup()
window.add_accel_group(accelerators)
# Widget
target_widget = Gtk.Button('Recompute Base Encryption Key Hash')
target_widget.connect('clicked', on_recompute_base_encryption_key_hash)
window.add(target_widget)
# Bind
bind_accelerator(accelerators, target_widget, '<Control>b')
window.show_all()
signal.signal(signal.SIGINT, signal.SIG_DFL)
Gtk.main()
if __name__ == '__main__':
main()
Также доступен как сущность: https://gist.github.com/ thorsummoner / 230bed5bbd3380bd5949
blockquote>Примечание: сигнал по умолчанию
clicked
, а неactivate
, поскольку приложения никогда не должны подключаться к сигналу::activate
, но использовать Gtk.Button::clicked
.
Вот несколько бит кода из одного из моих приложений Python + Gtk, далее расширенный в соответствии с комментариями к этому ответу:
self.my_accelerators = Gtk.AccelGroup()
self.entry = Gtk.builder.get_object("entry1")
self.add_accelerator(self.entry, "<Control>b", signal="backspace")
...
def add_accelerator(self, widget, accelerator, signal="activate"):
"""Adds a keyboard shortcut"""
if accelerator is not None:
#if DEBUG:
#print accelerator, widget.get_tooltip_text()
key, mod = Gtk.accelerator_parse(accelerator)
widget.add_accelerator(signal, self.my_accelerators, key, mod, Gtk.AccelFlags.VISIBLE)
Вот несколько бит кода из одного из моих приложений Python + Gtk, далее расширенный в соответствии с комментариями к этому ответу:
self.my_accelerators = Gtk.AccelGroup()
self.entry = Gtk.builder.get_object("entry1")
self.add_accelerator(self.entry, "<Control>b", signal="backspace")
...
def add_accelerator(self, widget, accelerator, signal="activate"):
"""Adds a keyboard shortcut"""
if accelerator is not None:
#if DEBUG:
#print accelerator, widget.get_tooltip_text()
key, mod = Gtk.accelerator_parse(accelerator)
widget.add_accelerator(signal, self.my_accelerators, key, mod, Gtk.AccelFlags.VISIBLE)
Я переупаковал данные ответы в этом потоке в отдельный пример:
#!/usr/bin/env python2
import signal
from gi.repository import Gtk
def bind_accelerator(accelerators, widget, accelerator, signal='clicked'):
key, mod = Gtk.accelerator_parse(accelerator)
widget.add_accelerator(signal, accelerators, key, mod, Gtk.AccelFlags.VISIBLE)
def on_recompute_base_encryption_key_hash(widget):
print 'Thinking... (This could take forever)'
def main():
if 'gtk':
window = Gtk.Window()
window.connect("delete-event", Gtk.main_quit)
if 'accelerator-demo':
# Accelerators
accelerators = Gtk.AccelGroup()
window.add_accel_group(accelerators)
# Widget
target_widget = Gtk.Button('Recompute Base Encryption Key Hash')
target_widget.connect('clicked', on_recompute_base_encryption_key_hash)
window.add(target_widget)
# Bind
bind_accelerator(accelerators, target_widget, '<Control>b')
window.show_all()
signal.signal(signal.SIGINT, signal.SIG_DFL)
Gtk.main()
if __name__ == '__main__':
main()
Также доступен как сущность: https://gist.github.com/ thorsummoner / 230bed5bbd3380bd5949
blockquote>Примечание: сигнал по умолчанию
clicked
, а неactivate
, поскольку приложения никогда не должны подключаться к сигналу::activate
, но использовать Gtk.Button::clicked
.
Вот несколько бит кода из одного из моих приложений Python + Gtk, далее расширенный в соответствии с комментариями к этому ответу:
self.my_accelerators = Gtk.AccelGroup()
self.entry = Gtk.builder.get_object("entry1")
self.add_accelerator(self.entry, "<Control>b", signal="backspace")
...
def add_accelerator(self, widget, accelerator, signal="activate"):
"""Adds a keyboard shortcut"""
if accelerator is not None:
#if DEBUG:
#print accelerator, widget.get_tooltip_text()
key, mod = Gtk.accelerator_parse(accelerator)
widget.add_accelerator(signal, self.my_accelerators, key, mod, Gtk.AccelFlags.VISIBLE)
Я переупаковал данные ответы в этом потоке в отдельный пример:
#!/usr/bin/env python2
import signal
from gi.repository import Gtk
def bind_accelerator(accelerators, widget, accelerator, signal='clicked'):
key, mod = Gtk.accelerator_parse(accelerator)
widget.add_accelerator(signal, accelerators, key, mod, Gtk.AccelFlags.VISIBLE)
def on_recompute_base_encryption_key_hash(widget):
print 'Thinking... (This could take forever)'
def main():
if 'gtk':
window = Gtk.Window()
window.connect("delete-event", Gtk.main_quit)
if 'accelerator-demo':
# Accelerators
accelerators = Gtk.AccelGroup()
window.add_accel_group(accelerators)
# Widget
target_widget = Gtk.Button('Recompute Base Encryption Key Hash')
target_widget.connect('clicked', on_recompute_base_encryption_key_hash)
window.add(target_widget)
# Bind
bind_accelerator(accelerators, target_widget, '<Control>b')
window.show_all()
signal.signal(signal.SIGINT, signal.SIG_DFL)
Gtk.main()
if __name__ == '__main__':
main()
Также доступен как сущность: https://gist.github.com/ thorsummoner / 230bed5bbd3380bd5949
blockquote>Примечание: сигнал по умолчанию
clicked
, а неactivate
, поскольку приложения никогда не должны подключаться к сигналу::activate
, но использовать Gtk.Button::clicked
.
Я переупаковал данные ответы в этом потоке в отдельный пример:
#!/usr/bin/env python2
import signal
from gi.repository import Gtk
def bind_accelerator(accelerators, widget, accelerator, signal='clicked'):
key, mod = Gtk.accelerator_parse(accelerator)
widget.add_accelerator(signal, accelerators, key, mod, Gtk.AccelFlags.VISIBLE)
def on_recompute_base_encryption_key_hash(widget):
print 'Thinking... (This could take forever)'
def main():
if 'gtk':
window = Gtk.Window()
window.connect("delete-event", Gtk.main_quit)
if 'accelerator-demo':
# Accelerators
accelerators = Gtk.AccelGroup()
window.add_accel_group(accelerators)
# Widget
target_widget = Gtk.Button('Recompute Base Encryption Key Hash')
target_widget.connect('clicked', on_recompute_base_encryption_key_hash)
window.add(target_widget)
# Bind
bind_accelerator(accelerators, target_widget, '<Control>b')
window.show_all()
signal.signal(signal.SIGINT, signal.SIG_DFL)
Gtk.main()
if __name__ == '__main__':
main()
Также доступен как сущность: https://gist.github.com/ thorsummoner / 230bed5bbd3380bd5949
blockquote>Примечание: сигнал по умолчанию
clicked
, а неactivate
, поскольку приложения никогда не должны подключаться к сигналу::activate
, но использовать Gtk.Button::clicked
.
Вот несколько бит кода из одного из моих приложений Python + Gtk, далее расширенный в соответствии с комментариями к этому ответу:
self.my_accelerators = Gtk.AccelGroup()
self.entry = Gtk.builder.get_object("entry1")
self.add_accelerator(self.entry, "<Control>b", signal="backspace")
...
def add_accelerator(self, widget, accelerator, signal="activate"):
"""Adds a keyboard shortcut"""
if accelerator is not None:
#if DEBUG:
#print accelerator, widget.get_tooltip_text()
key, mod = Gtk.accelerator_parse(accelerator)
widget.add_accelerator(signal, self.my_accelerators, key, mod, Gtk.AccelFlags.VISIBLE)
Я переупаковал данные ответы в этом потоке в отдельный пример:
#!/usr/bin/env python2
import signal
from gi.repository import Gtk
def bind_accelerator(accelerators, widget, accelerator, signal='clicked'):
key, mod = Gtk.accelerator_parse(accelerator)
widget.add_accelerator(signal, accelerators, key, mod, Gtk.AccelFlags.VISIBLE)
def on_recompute_base_encryption_key_hash(widget):
print 'Thinking... (This could take forever)'
def main():
if 'gtk':
window = Gtk.Window()
window.connect("delete-event", Gtk.main_quit)
if 'accelerator-demo':
# Accelerators
accelerators = Gtk.AccelGroup()
window.add_accel_group(accelerators)
# Widget
target_widget = Gtk.Button('Recompute Base Encryption Key Hash')
target_widget.connect('clicked', on_recompute_base_encryption_key_hash)
window.add(target_widget)
# Bind
bind_accelerator(accelerators, target_widget, '<Control>b')
window.show_all()
signal.signal(signal.SIGINT, signal.SIG_DFL)
Gtk.main()
if __name__ == '__main__':
main()
Также доступен как сущность: https://gist.github.com/ thorsummoner / 230bed5bbd3380bd5949
blockquote>Примечание: сигнал по умолчанию
clicked
, а неactivate
, поскольку приложения никогда не должны подключаться к сигналу::activate
, но использовать Gtk.Button::clicked
.
Вот несколько бит кода из одного из моих приложений Python + Gtk, далее расширенный в соответствии с комментариями к этому ответу:
self.my_accelerators = Gtk.AccelGroup()
self.entry = Gtk.builder.get_object("entry1")
self.add_accelerator(self.entry, "<Control>b", signal="backspace")
...
def add_accelerator(self, widget, accelerator, signal="activate"):
"""Adds a keyboard shortcut"""
if accelerator is not None:
#if DEBUG:
#print accelerator, widget.get_tooltip_text()
key, mod = Gtk.accelerator_parse(accelerator)
widget.add_accelerator(signal, self.my_accelerators, key, mod, Gtk.AccelFlags.VISIBLE)
Я переупаковал данные ответы в этом потоке в отдельный пример:
#!/usr/bin/env python2
import signal
from gi.repository import Gtk
def bind_accelerator(accelerators, widget, accelerator, signal='clicked'):
key, mod = Gtk.accelerator_parse(accelerator)
widget.add_accelerator(signal, accelerators, key, mod, Gtk.AccelFlags.VISIBLE)
def on_recompute_base_encryption_key_hash(widget):
print 'Thinking... (This could take forever)'
def main():
if 'gtk':
window = Gtk.Window()
window.connect("delete-event", Gtk.main_quit)
if 'accelerator-demo':
# Accelerators
accelerators = Gtk.AccelGroup()
window.add_accel_group(accelerators)
# Widget
target_widget = Gtk.Button('Recompute Base Encryption Key Hash')
target_widget.connect('clicked', on_recompute_base_encryption_key_hash)
window.add(target_widget)
# Bind
bind_accelerator(accelerators, target_widget, '<Control>b')
window.show_all()
signal.signal(signal.SIGINT, signal.SIG_DFL)
Gtk.main()
if __name__ == '__main__':
main()
Также доступен как сущность: https://gist.github.com/ thorsummoner / 230bed5bbd3380bd5949
blockquote>Примечание: сигнал по умолчанию
clicked
, а неactivate
, поскольку приложения никогда не должны подключаться к сигналу::activate
, но использовать Gtk.Button::clicked
.
clicked
ускоритель может быть выгнут очень быстро, но кнопка не визуально нажата. При использовании activate
кнопка будет нажата, но ускоритель может быть нажат только после завершения визуального нажатия.
– ThorSummoner
19 January 2016 в 01:44
Вот несколько бит кода из одного из моих приложений Python + Gtk, далее расширенный в соответствии с комментариями к этому ответу:
self.my_accelerators = Gtk.AccelGroup()
self.entry = Gtk.builder.get_object("entry1")
self.add_accelerator(self.entry, "<Control>b", signal="backspace")
...
def add_accelerator(self, widget, accelerator, signal="activate"):
"""Adds a keyboard shortcut"""
if accelerator is not None:
#if DEBUG:
#print accelerator, widget.get_tooltip_text()
key, mod = Gtk.accelerator_parse(accelerator)
widget.add_accelerator(signal, self.my_accelerators, key, mod, Gtk.AccelFlags.VISIBLE)
self.add_accelerator(self.quick_add_entry, "<Control>l", signal="grab-focus") AttributeError: 'DiscvurWindow' object has no attribute 'quick_add_entry'
. Когда я пытаюсь выполнить поиск в Интернете «quick_add_entry», я не могу найти его нигде. Вы уверены, что это правильная функция? Где я могу найти дополнительную информацию / учебник для этого? Кроме того, имеетс & quot; & lt; Control & lt; l & quot; означает Ctrl + l или это ошибка?
– Agmenor
20 June 2012 в 23:01