2011-07-07 17 views
9

Así que todavía soy bastante nuevo en Python, y he estado aprendiendo durante un par de meses, pero una cosa que estoy tratando de averiguar es decir que tiene una ventana básica ...Python Haga clic en el menú con PyGTK

#!/usr/bin/env python 

import sys, os 
import pygtk, gtk, gobject 

class app: 

    def __init__(self): 
    window = gtk.Window(gtk.WINDOW_TOPLEVEL) 
    window.set_title("TestApp") 
    window.set_default_size(320, 240) 
    window.connect("destroy", gtk.main_quit) 
    window.show_all() 

app() 
gtk.main() 

Quiero hacer clic derecho dentro de esta ventana, y tener un menú emergente como alerta, copiar, salir, lo que sea que me apetezca dejar.

¿Cómo lo conseguiría?

+0

En primer lugar, debe leer sobre cómo GTK utiliza eventos. Comience con hacer clic derecho para hacer algo, luego lea sobre cómo hacer menús contextuales. Nunca he usado PyGTK o GTK, pero probablemente haya un widget para eso. – JAB

Respuesta

12

Hay un ejemplo para hacer esto mismo que se encuentra en http://www.pygtk.org/pygtk2tutorial/sec-ManualMenuExample.html

Muestra cómo crear un menú adjuntarlo a una barra de menú y también escuchar para un evento de botón del ratón clic y móvil el mismo menú que fue creado.

Creo que esto es lo que buscas.

EDIT: (añadió una explicación más detallada para mostrar cómo responder a eventos de botón único derecho del ratón)

de resumir.

Crea un widget para escuchar los eventos del mouse en. En este caso, es un botón.

button = gtk.Button("A Button") 

Crear un menú

menu = gtk.Menu() 

llenarlo con elementos de menú

menu_item = gtk.MenuItem("A menu item") 
menu.append(menu_item) 
menu_item.show() 

Haga el widget para escuchar eventos de prensa ratón, adjuntando el menú a la misma.

button.connect_object("event", self.button_press, menu) 

A continuación, defina el método que maneja estos eventos. Como se indica en el ejemplo en el enlace, el widget que se pasa a este método es el menú que desea que aparezca, no el widget que está escuchando estos eventos.

def button_press(self, widget, event): 
    if event.type == gtk.gdk.BUTTON_PRESS and event.button == 3: 
     #make widget popup 
     widget.popup(None, None, None, event.button, event.time) 
     pass 

Usted verá que la sentencia if comprueba para ver si se ha pulsado el botón, si es verdad que se encargarán de verificar para ver cuál de los botones se presionó. El botón evento.total es un valor entero que representa el botón del mouse que se presionó. Entonces 1 es el botón izquierdo, 2 es el medio y 3 es el botón derecho del mouse. Al verificar si el evento.botón es 3, solo está respondiendo a los eventos de la prensa del mouse para el botón derecho del mouse.

+0

Gracias! Eso es casi exactamente lo que he estado tratando de resolver. El único problema es que el menú se muestra con el clic izquierdo, así como a la derecha. En el que no quiero que aparezca en el clic izquierdo, pero debería ser capaz de arreglar eso. ¡Gracias! –

+0

@ mikethedj4: ¿podría decir si/cómo logró definir el clic que activa el menú emergente? Gracias. – Benjamin

+1

@Benjamin: Creo que la respuesta debería ahora cubrir lo que eres después de –

Cuestiones relacionadas