This is an example from here:
import gi
gi.require_version("Gtk", "4.0")
from gi.repository import Gtk
def on_activate(app):
win = Gtk.ApplicationWindow(application=app)
btn = Gtk.Button(label="Hello, World!")
btn.connect('clicked', lambda x: win.close())
win.set_child(btn)
win.present()
app = Gtk.Application(application_id='org.gtk.Example')
app.connect('activate', on_activate)
app.run(None)
My goal is to make the application close itself upon pressing key q
anywhere in that window. This is also my question: how to achieve this with GTK4?
My attempts
1.
import gi
gi.require_version("Gtk", "4.0")
from gi.repository import Gtk
def on_activate(app):
win = Gtk.ApplicationWindow(application=app)
win.connect('key-pressed', lambda x,y: win.close())
btn = Gtk.Button(label="Hello, World!")
btn.connect('clicked', lambda x: win.close())
win.set_child(btn)
win.present()
app = Gtk.Application(application_id='org.gtk.Example')
app.connect('activate', on_activate)
app.run(None)
Running that code with python file.py
gives this error:
Traceback (most recent call last):
File "/home/caveman/lol/file.py", line 7, in on_activate
app.connect('key-pressed', lambda x,y: win.close())
TypeError: <Gtk.Application object at 0x7fcd657fe600 (GtkApplication at 0x55bdc34c5210)>: unknown signal name: key-pressed
2.
import gi
gi.require_version("Gtk", "4.0")
from gi.repository import Gtk
class PressableWindow(Gtk.ApplicationWindow, Gtk.EventControllerKey):
def __init__(self, app):
super().__init__(application=app)
def on_activate(app):
win = PressableWindow(app)
win.connect('key-pressed', lambda x,y: win.close())
btn = Gtk.Button(label="Hello, World!")
btn.connect('clicked', lambda x: win.close())
win.set_child(btn)
win.present()
app = Gtk.Application(application_id='org.gtk.Example')
app.connect('activate', on_activate)
app.run(None)
Gives error:
Traceback (most recent call last):
File "/home/caveman/lol/file.py", line 11, in on_activate
win.connect('key-pressed', lambda x,y: win.close())
TypeError: <__main__.PressableWindow object at 0x7f8838b5f8c0 (__main__+PressableWindow at 0x555bddea82f0)>: unknown signal name: key-pressed