2016-01-22 13 views
7

Sto provando a cambiare il colore di evidenziazione per un gtk.EventBox. Ha un certo colore di sfondo e voglio tracciare una linea attorno ad esso con il suo colore complementare. Ho trovato drag_highlight, che disegna una linea attorno al widget, ma non ho capito come cambiare il colore: è sempre nero. Qualche idea?Colore Pygtk per drag_highlight

+0

probabilmente andando necessità di scrivere il proprio codice per questo. Nel doc per 'drag_highlight' menziona che si connette ai gestori' expose_event' e 'draw', quindi se fai lo stesso e aggiorna lo stile (o il bordo) quando accadono questi eventi. – B8vrede

risposta

4

Per rendere la linea intorno alla EventBox, è possibile metterlo in Frame o in un altro EventBox (in questo caso è possibile impostare la larghezza del "confine"), qui è come appare:

enter image description here

E qui è il codice (si tratta di un modified EventBox example):

#!/usr/bin/env python 

# example eventbox.py 

import pygtk 
pygtk.require('2.0') 
import gtk 

class EventBoxExample: 
    def __init__(self): 
     window = gtk.Window(gtk.WINDOW_TOPLEVEL) 
     window.set_title("Event Box") 
     window.connect("destroy", lambda w: gtk.main_quit()) 
     window.set_border_width(10) 

     # Create an EventBox and add it to our toplevel window 
     frame = gtk.EventBox() # gtk.Frame() 
     window.add(frame) 
     frame.show() 
     frame.set_border_width(2) 
     frame.modify_bg(gtk.STATE_NORMAL, 
          frame.get_colormap().alloc_color("blue")) 

     event_box = gtk.EventBox() 
     frame.add(event_box) 
     event_box.set_border_width(10) 
     event_box.show() 

     # Create a long label 
     label = gtk.Label("Click here to quit, quit, quit, quit, quit") 
     event_box.add(label) 
     label.show() 

     # Clip it short. 
     label.set_size_request(110, 20) 

     # And bind an action to it 
     event_box.set_events(gtk.gdk.BUTTON_PRESS_MASK) 
     event_box.connect("button_press_event", lambda w,e: gtk.main_quit()) 

     # More things you need an X window for ... 
     event_box.realize() 
     event_box.window.set_cursor(gtk.gdk.Cursor(gtk.gdk.HAND1)) 

     # Set background color to green 
     event_box.modify_bg(gtk.STATE_NORMAL, 
          event_box.get_colormap().alloc_color("green")) 

     window.show() 

def main(): 
    gtk.main() 
    return 0 

if __name__ == "__main__": 
    EventBoxExample() 
    main() 
+1

Funziona alla grande, ma non premierò ancora la taglia perché mi piacerebbe avere una risposta che non richieda un altro genitore per EventBox. Accetto la tua risposta per ora, così che non ho necessariamente bisogno di ricordarti di assegnarti la taglia alla sua scadenza. – zondo

Problemi correlati