Szybko tworzę aplikację dla Ubuntu App Showdown w Python + Gtk. Nazywam to Discvur. Chciałbym załączyć niektóre skróty klawiaturowe.
Przeszukując sieć, znalazłem tę stronę o AccelGroup i tę stronę o gtk_widget_add_accelerator, ale nie rozumiem, jak zacząć. Czy możesz mi powiedzieć, jak zdefiniowałbym odpowiedni sygnał, a następnie używał go w mojej aplikacji?
Odpowiedzi:
Oto kilka fragmentów kodu z jednej z moich aplikacji Python + Gtk, dodatkowo rozszerzonych zgodnie z komentarzami do tej odpowiedzi:
źródło
self.add_accelerator(self.quick_add_entry, "<Control>l", signal="grab-focus") AttributeError: 'DiscvurWindow' object has no attribute 'quick_add_entry'
. Gdy próbuję wyszukać w sieci hasło „szybkie_adres_wszelkie”, nie mogę go nigdzie znaleźć. Czy na pewno jest to właściwa funkcja? Gdzie mogę znaleźć więcej informacji / samouczek do tego? Ponadto, czy „<Control> l” oznacza Ctrl + l, czy jest to błąd?Oto kod, który w końcu zadziałał. Ponieważ zależy to w dużej mierze od mojego środowiska programistycznego Quickly + Glade + Python + Gtk, robię z tego niezależną odpowiedź. Odpowiedź Bryce'a bardzo pomogła, podobnie jak moja wymiana z aking1012 .
Rzeczywisty kod w edytorze tekstu:
W Glade utworzyłem GtkEntry o nazwie „entry1” w moim oknie o nazwie „discvur_window”. W zakładce „Sygnały” nadałem sygnałowi „backspace” moduł obsługi o nazwie „on_erasing”.
Teraz, naciśnięcie Backspacelub Ctrl+ Bpowoduje, że terminal wypisuje „To działa”.
źródło
Przepakowałem podane odpowiedzi w tym wątku do samodzielnego przykładu:
Uwaga: Domyślnym sygnałem jest
clicked
nieactivate
dlatego , że aplikacje nigdy nie powinny łączyć się z::activate
sygnałem, ale używać::clicked
sygnału Gtk.Button .źródło
clicked
akceleratora można bardzo szybko zmiażdżyć, ale przycisk nie naciska wizualnie. Podczas używaniaactivate
przycisk zostanie wciśnięty, ale akcelerator można nacisnąć dopiero po zakończeniu wizualnego wciśnięcia.