Мне нужно изменить только фоновый цвет окна и сохранить виджеты в системных цветах.
Пространство между ящиками должно содержать другой цвет
http: // ubuntuone. com / 756mWfF2hTYwgiGCOccmEz
Что-то вроде этого
http://ubuntuone.com/3jCDQHtSt6KJfbYQ6YMH7F
t знает, есть ли беспорядок здесь лучший способ заставить это выглядеть так
Вы не указали язык программирования, поэтому я предполагаю Python для простоты.
В gtk большинство компонентов могут подключаться к событию экспонирования, которое затем можно использовать для рисования вручную в виджет (для этого используется каир, все эти виджеты имеют связанный с ними каирский контекст) [!d1 ]
Вот простой пример окна с пользовательским цветным Vbox и двумя кнопками, пространство между контейнерами (здесь установлено до 20 пикселей), а маленькая рамка вокруг кнопок показывает цвет фона VBox.
import gtk
class MyColoredBox(gtk.VBox):
def __init__(self, homogeneous=False, spacing=0):
super(MyColoredBox, self).__init__(homogeneous, spacing)
self.connect("expose-event", self.expose)
def expose(self, widget, event):
cr = widget.window.cairo_create()
cr.set_source_rgb(1.0, 1.0, 0.5)
cr.rectangle(event.area.x, event.area.y,
event.area.width, event.area.height)
cr.fill()
class PyApp(gtk.Window):
def __init__(self):
super(PyApp, self).__init__()
self.connect("destroy", gtk.main_quit)
vbox = MyColoredBox(False, 20)
b1 = gtk.Button("Hello")
b2 = gtk.Button("World")
vbox.add(b1)
vbox.add(b2)
self.add(vbox)
self.show_all()
if __name__ == "__main__":
PyApp()
gtk.main()
Полученная программа выглядит примерно так:
Вы не указали язык программирования, поэтому я предполагаю Python для простоты.
В gtk большинство компонентов могут подключаться к событию экспонирования, которое затем может использоваться для рисования вручную в виджет ( cairo используется для этого, все эти виджеты имеют каирский контекст прикрепленный к ним).
Вот простой пример окна с пользовательским цветным Vbox и двумя кнопками, пространство между лотками (здесь установлено до 20 пикселей), а маленькая рамка вокруг кнопок показывает фон цвет VBox.
import gtk
class MyColoredBox(gtk.VBox):
def __init__(self, homogeneous=False, spacing=0):
super(MyColoredBox, self).__init__(homogeneous, spacing)
self.connect("expose-event", self.expose)
def expose(self, widget, event):
cr = widget.window.cairo_create()
cr.set_source_rgb(1.0, 1.0, 0.5)
cr.rectangle(event.area.x, event.area.y,
event.area.width, event.area.height)
cr.fill()
class PyApp(gtk.Window):
def __init__(self):
super(PyApp, self).__init__()
self.connect("destroy", gtk.main_quit)
vbox = MyColoredBox(False, 20)
b1 = gtk.Button("Hello")
b2 = gtk.Button("World")
vbox.add(b1)
vbox.add(b2)
self.add(vbox)
self.show_all()
if __name__ == "__main__":
PyApp()
gtk.main()
Полученная программа выглядит примерно так: [/g1]