2011-04-28 12 views

Respuesta

9

Conéctese a la señal button-press-event en el EventBox.

+0

¿Por qué presionar el botón? El creador del hilo habla sobre el clic del mouse, no sobre el botón – fnc12

+1

Oh ny bet. Parece que presionar el botón significa que el botón del mouse. Lo siento – fnc12

+0

En mi prueba, las etiquetas parecían consumir 'button-press-event'; No tuve problemas para usar la señal en otros widgets; : \ Weird.Otros comentarios sugieren que Gtk.EventBox es necesario para las etiquetas. – ThorSummoner

0

Conéctese a la señal de botón-evento de presión, pero directamente en la etiqueta Gtk. Diría que no necesitas un Eventbox aquí, ya que GtkLable hereda ya esta señal de GtkWidget. Para habilitar GtkLabel para recibir esos eventos, primero debe llamar al gtk_widget_set_events o gtk_widget_add_events, y agregar la sensibilidad al evento GDK_BUTTON_PRESS_MASK.

+3

No todos los widgets GTK pueden recibir eventos. 'GtkLabel' es uno de esos, que deben estar envueltos en un cuadro de evento. Véase, por ejemplo, esta pregunta de PyGTK FAQ: http://faq.pygtk.org/index.py?query=eventbox&querytype=simple&req=search – ptomato

+0

Sin embargo, el bit sobre la máscara GDK podría ser útil para otros widgets. –

7

Gtk # diferencia entre Widgets y 'Contenedores'. La mayoría de los widgets colocados en un formulario Gtk # NO recibirán eventos de clic del mouse. Con el fin de recibir un evento de ratón que necesita para colocar el widget en el interior de un contenedor específico - como EventBox:

  1. Añadir un containter EventBox a su formulario. Puede colocarlo detrás de otros widgets o dado que no está visible, a menos que lo seleccione específicamente (o cambie el color de fondo).

  2. Ponga su widget de etiqueta dentro de este EventBox. Tenga en cuenta que la etiqueta obtendrá la forma y el tamaño de EventBox.

  3. Agregue a este EventBox la señal 'ButtonPressEvent' fuera de las "Señales comunes de widgets".

Si es necesario identificar el botón que se ha hecho clic durante la manipulación de este evento, utiliza el valor uint en: args.Event.Button típicamente '1' será el botón izquierdo del ratón, '2' el botón central y '3' el botón derecho ('2' podría ser también cuando se hace clic en los botones izquierdo y derecho).

0

Parece que no necesita EventBox en absoluto: dado que el problema es que las etiquetas no tienen ninguna ventana X11 asociada, ¡simplemente proporciónela con set_has_window(True)! Las siguientes obras para mí:

self.label = Gtk.Label() 
    self.label.set_has_window(True) 
    self.label.set_events(Gdk.EventMask.BUTTON_PRESS_MASK) 
    self.label.connect("button-press-event", self.click_label) 

El documentation dice que sólo se debe utilizar para la implementación de los widgets - pero bueno, funciona. ¿A quién le importa "debería"?

Cuestiones relacionadas