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