2016-01-22 10 views
7

Próbuję zmienić kolor podświetlenia dla gtk.EventBox. Ma określony kolor tła i chcę narysować wokół niego komplementarny kolor. Znalazłem drag_highlight, który rysuje linię wokół widżetu, ale nie wiem, jak zmienić kolor: zawsze jest czarny. Jakieś pomysły?Kolor Pygt dla drag_highlight

+0

prawdopodobnie będzie trzeba pisać własny kod do tego. W dokumencie dla 'drag_highlight' wzmiankuje, że łączy się on z procedurami' expose_event' i 'draw', więc jeśli zrobisz to samo, a następnie zaktualizujesz styl (lub granicę), kiedy te zdarzenia się zdarzą. – B8vrede

Odpowiedz

4

Aby linię wokół EventBox, możliwe jest, aby umieścić go w Frame lub innego EventBox (w tym przypadku możliwe jest, aby ustawić szerokość „granicy”), oto jak to wygląda:

enter image description here

A oto kod (jest to 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

Działa to świetnie, ale nie przyznam nagrody, ale chciałbym uzyskać odpowiedź, która nie wymaga innego rodzica dla EventBox. Na razie akceptuję twoją odpowiedź, więc niekoniecznie muszę pamiętać o przyznaniu ci nagrody po jej wygaśnięciu. – zondo