Wie kommt man auch eine GtkDialog der Standardantwort auf Abzug der Leertaste
-
25-09-2019 - |
Frage
Ich habe ein messageDialog so einrichten, dass seine Standardantwort gtk.RESPONSE_OK ist so die Ordnung Schaltfläche geklickt wird, wenn der Benutzer Hits geben, auch wenn die in Ordnung Taste nicht Fokus hat. Ich möchte auch die Leertaste haben die default_response Trigget. Was ist der beste Weg, um dies?
zu tunDies ist mit Python 2.4 in einer Linux-Umgebung. Leider Erlaubnis habe ich nicht Python zu aktualisieren.
Lösung
Verbindung mit dem key-press-event
Signal auf dem Nachrichtendialog:
def on_dialog_key_press(dialog, event):
if event.string == ' ':
dialog.response(gtk.RESPONSE_OK)
return True
return False
dialog = gtk.MessageDialog(message_format='Some message', buttons=gtk.BUTTONS_OK_CANCEL)
dialog.add_events(gtk.gdk.KEY_PRESS_MASK)
dialog.connect('key-press-event', on_dialog_key_press)
dialog.run()
Beachten Sie aber, dass das Ändern der Erwartungen der Benutzer der Benutzeroberfläche wird allgemein als nicht cool.
Andere Tipps
Ich bin ein total Noob an pygtk, aber ich konnte nicht get @ ptomato Vorbild + „Hallo Welt“ Textvorschlag zu arbeiten, wenn ich nicht auf Raum und Rückkehr reagiert und einen Aufruf an dialog.destroy () hinzugefügt. Nehmen Sie es für das, was es wert ist.
#!/usr/bin/env python
# example helloworld.py
import pygtk
pygtk.require('2.0')
import gtk
def md_event(dialog, event):
if event.keyval in (gtk.keysyms.Return, gtk.keysyms.space):
dialog.response(gtk.RESPONSE_OK)
dialog.destroy()
return True
elif event.keyval == gtk.keysyms.Escape:
dialog.response(gtk.RESPONSE_CANCEL)
dialog.destroy()
return True
return False
class HelloWorld:
# This is a callback function. The data arguments are ignored
# in this example. More on callbacks below.
def hello(self, widget, data=None):
print "Hello World"
# Another callback
def destroy(self, widget, data=None):
gtk.main_quit()
def create_message_dialog(self, x, y):
md = gtk.MessageDialog(buttons=gtk.BUTTONS_OK_CANCEL, message_format="wawawawaaaaa")
md.add_events(gtk.gdk.KEY_PRESS_MASK)
md.connect("key-press-event", md_event)
result = md.run()
print result
def __init__(self):
# create a new window
self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
# Here we connect the "destroy" event to a signal handler.
# This event occurs when we call gtk_widget_destroy() on the window,
# or if we return FALSE in the "delete_event" callback.
self.window.connect("destroy", self.destroy)
# Sets the border width of the window.
self.window.set_border_width(10)
self.button2 = gtk.Button("Message Dialog")
self.button2.connect("clicked", self.create_message_dialog, None)
self.window.add(self.button2)
self.button2.show()
# and the window
self.window.show()
def main(self):
# All PyGTK applications must have a gtk.main(). Control ends here
# and waits for an event to occur (like a key press or mouse event).
gtk.main()
def run_hello():
hello = HelloWorld()
hello.main()
# If the program is run directly or passed as an argument to the python
# interpreter then create a HelloWorld instance and show it
if __name__ == "__main__":
run_hello()