2016-01-22 8 views
7

Ich versuche, die Highlight-Farbe für eine gtk.EventBox zu ändern. Es hat eine bestimmte Hintergrundfarbe, und ich möchte eine Linie mit seiner Komplementärfarbe zeichnen. Ich habe gefunden drag_highlight, die eine Linie um das Widget zeichnet, aber ich habe nicht herausgefunden, wie man die Farbe ändern: es ist immer schwarz. Irgendwelche Ideen?Pygtk Farbe für drag_highlight

+0

Sie wahrscheinlich werde Bedarf Ihren eigenen Code dafür zu schreiben. Im Dokument für "drag_highlight" erwähnt, verbindet es sich mit den 'expose_event'- und' draw'-Handlern, wenn Sie das gleiche tun und dann den Stil (oder Rahmen) aktualisieren, wenn diese Ereignisse eintreten. – B8vrede

Antwort

4

Um die Linie um die EventBox zu machen, ist es möglich, sie in die Frame zu setzen oder einem anderen EventBox (in diesem Fall ist es möglich, die Breite der „Grenze“ zu setzen), hier ist, wie es aussieht:

enter image description here

Und hier ist der Code (es ist ein 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

Das funktioniert gut, aber ich werde das Bounty noch nicht vergeben, weil ich eine Antwort bekommen möchte, die kein anderes Elternteil für die EventBox benötigt. Ich akzeptiere deine Antwort für den Moment, so dass ich nicht unbedingt daran denken muss, dir das Kopfgeld bei Ablauf zu geben. – zondo