Portál AbcLinuxu, 8. května 2025 02:07

Dotaz: glade python drawingarea

28.5.2006 21:11 Jáchym Čepický | skóre: 29 | blog: U_Jachyma
glade python drawingarea
Přečteno: 396×
Odpovědět | Admin
Snažím se napsat jednu drobou aplikaci v pythonu s GUI generovaným gladem. Co bych to nepřiznal: jedná se v podstatě o prohlížečku map. Z toho důvodu potřebuji widget GtkDrawingarea a hlavně odchytávat události myši

Snažím se něco vykoukat podle pygtk tutoriálu, ale narážím na problém, že pokud použiji vygenerované xml a přistoupím na jeho objekty, nejsou volány funkce, zachycující události myši. Zároveň se objevuje hláška
 GtkWarning: gtk_widget_set_events: assertion `!GTK_WIDGET_REALIZED (widget)' failed
  drawing_area.set_events(gtk.gdk.EXPOSURE_MASK
chyba ukazuje na řádek, kde se snažím nastavit události:
drawing_area.set_events(gtk.gdk.EXPOSURE_MASK
                            | gtk.gdk.LEAVE_NOTIFY_MASK
                            | gtk.gdk.BUTTON_PRESS_MASK
                            | gtk.gdk.POINTER_MOTION_MASK
                            | gtk.gdk.POINTER_MOTION_HINT_MASK)
Podařilo se někomu napsat kreslící aplikaci za použití Gladu a pythonu? Příklad kódu by nebyl?

Díky
Nástroje: Začni sledovat (2) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

28.5.2006 21:35 Jáchym Čepický | skóre: 29 | blog: U_Jachyma
Rozbalit Rozbalit vše Re: glade python drawingarea
Odpovědět | | Sbalit | Link | Blokovat | Admin
Něco mám:
> Try to connect to signal_realize, and do add_events there.
> Also, for motion event and for signal_realize use after flag = false
> when connecting.
> Syntax like: signal().connect( sigc::mem_fun( object, &mem_fun ), false );
>

Ale nerozumim tomu, neodpustím si neodpustitelné "Pomoc!" :-)

Zdroj

kus mého kódu:

...
drawing_area.connect("motion_notify_event",self.motion_notify_event)
drawing_area.connect("button_press_event", self.button_press_event)
...
drawing_area.set_events(gtk.gdk.EXPOSURE_MASK
                            | gtk.gdk.LEAVE_NOTIFY_MASK
                            | gtk.gdk.BUTTON_PRESS_MASK
                            | gtk.gdk.POINTER_MOTION_MASK
                            | gtk.gdk.POINTER_MOTION_HINT_MASK)
...

Díky

Fuky avatar 28.5.2006 23:20 Fuky | skóre: 52 | blog: 4u
Rozbalit Rozbalit vše Re: glade python drawingarea

Nastav obsluhu signálů i masku událostí přímo v Gladu (obrázek) a po načtení XML souboru připoj signály (příklad):

xml = gtk.glade.XML("platno.glade", "window")
xml.signal_autoconnect(locals())
29.5.2006 10:45 Jáchym Čepický | skóre: 29 | blog: U_Jachyma
Rozbalit Rozbalit vše Re: glade python drawingarea
TO je přesně ono!! Díky moc
29.5.2006 01:31 pok | skóre: 11
Rozbalit Rozbalit vše Re: glade python drawingarea
Odpovědět | | Sbalit | Link | Blokovat | Admin
Taky jsem to nedávno řešil: PyGTK DrawingArea (4 odkazy na nejdůležitější FAQ)
30.5.2006 15:30 Jáchym Čepický | skóre: 29 | blog: U_Jachyma
Rozbalit Rozbalit vše glade python menu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Další dotaz připojuji sem, ať je to když tak pohromadě.

Vytvořil jsem nezávislé menu, které se objeví při kliknutí pravým tlačítkem na drawing area. potud vše OK. Bohužel funkce, které by měly být zavolány při výběru menu volány nejsou. Nevíte prosím jak na to?

Screenshot nastavení glade
__init__(self):
    self.menu_tree = gtk.glade.XML(gladexml, "menu1")
    self.damenu = self.menu_tree.get_widget("menu1")

def on_delete_one_activate(self,widget,event):
        print "TADY"
        print event
        #self.digitizedLine.pop()
30.5.2006 22:26 Jáchym Čepický | skóre: 29 | blog: U_Jachyma
Rozbalit Rozbalit vše Re: glade python menu
self.menu_tree = gtk.glade.XML(gladexml, "menu1")
self.settings_tree.signal_autoconnect(self)
self.damenu = self.menu_tree.get_widget("menu1")

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.