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
7
A
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:
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
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